47 #include <basic/options/option.hh>
57 #include <basic/Tracer.hh>
65 #include <utility/io/izstream.hh>
70 #include <basic/options/keys/score.OptionKeys.gen.hh>
71 #include <basic/options/keys/packing.OptionKeys.gen.hh>
72 #include <basic/options/keys/enzdes.OptionKeys.gen.hh>
73 #include <basic/options/keys/docking.OptionKeys.gen.hh>
74 #include <basic/options/keys/in.OptionKeys.gen.hh>
79 #include <utility/vector0.hh>
80 #include <utility/vector1.hh>
87 static basic::Tracer
tr(
"protocols.enzdes.EnzdesBaseProtocol");
91 bb_min_allowed_dev_(0.5),
92 loop_bb_min_allowed_dev_(0.5),
93 lig_superposition_file_read_(false),
95 exclude_protein_protein_hack_elec_(true)
103 bb_min_allowed_dev_ = basic::options::option[ basic::options::OptionKeys::enzdes::bb_min_allowed_dev];
111 using namespace basic::options;
112 using namespace core::scoring;
115 if( basic::options::option[basic::options::OptionKeys::enzdes::chi_min].user() )
chi_min_ =
true;
118 if( basic::options::option[basic::options::OptionKeys::enzdes::bb_min].user() )
bb_min_ =
true;
123 if( basic::options::option[basic::options::OptionKeys::enzdes::min_all_jumps].user() )
min_all_jumps_ =
true;
126 if( basic::options::option[basic::options::OptionKeys::enzdes::minimize_ligand_torsions].user() ){
129 lig_min_stddev_= basic::options::option[basic::options::OptionKeys::enzdes::minimize_ligand_torsions].value();
132 if( basic::options::option[basic::options::OptionKeys::enzdes::minimize_all_ligand_torsions].user() ){
135 lig_min_stddev_= basic::options::option[basic::options::OptionKeys::enzdes::minimize_ligand_torsions].value();
143 if( basic::options::option[basic::options::OptionKeys::enzdes::fix_catalytic_aa].user() )
fix_catalytic_aa_ =
true;
150 if ( basic::options::option[ basic::options::OptionKeys::score::weights ].user() ) {
186 if( basic::options::option[basic::options::OptionKeys::enzdes::favor_native_res].user() || basic::options::option[ basic::options::OptionKeys::in::file::pssm ].user() ){
198 if( basic::options::option[ basic::options::OptionKeys::docking::ligand::old_estat ].user() ){
204 scorefxn_->set_energy_method_options( options );
209 if( basic::options::option[basic::options::OptionKeys::in::file::native].user() ){
212 (*scorefxn_)( *natpose);
224 return "EnzdesBaseProtocol";
230 using namespace core;
235 if( cstcache ) to_return = cstcache->enzcst_io()->ordered_constrained_positions( pose );
238 if( to_return.size() == 0 ){
246 std::set< core::Size >
const &
268 using namespace basic::options;
269 using namespace basic::options::OptionKeys;
271 option.add_relevant( in::file::native );
272 option.add_relevant( in::file::s );
273 option.add_relevant( in::file::l );
274 option.add_relevant( OptionKeys::score::weights );
275 option.add_relevant( OptionKeys::score::patch );
276 option.add_relevant( OptionKeys::packing::soft_rep_design );
283 option.add_relevant( OptionKeys::enzdes::detect_design_interface );
284 option.add_relevant( OptionKeys::enzdes::include_catres_in_interface_detection );
285 option.add_relevant( OptionKeys::enzdes::fix_catalytic_aa );
286 option.add_relevant( OptionKeys::enzdes::ex_catalytic_rot );
287 option.add_relevant( OptionKeys::enzdes::cst_min );
288 option.add_relevant( OptionKeys::enzdes::chi_min );
289 option.add_relevant( OptionKeys::enzdes::bb_min );
290 option.add_relevant( OptionKeys::enzdes::bb_min_allowed_dev );
291 option.add_relevant( OptionKeys::enzdes::loop_bb_min_allowed_dev );
292 option.add_relevant( OptionKeys::enzdes::enz_debug );
293 option.add_relevant( OptionKeys::enzdes::no_packstat_calculation );
294 option.add_relevant( OptionKeys::enzdes::compare_native );
295 option.add_relevant( OptionKeys::enzdes::favor_native_res );
296 option.add_relevant( OptionKeys::docking::ligand::old_estat );
307 using namespace core::pack::task;
308 using namespace basic::options;
314 detect_enzdes_interface->set_design(design);
320 taskfactory.push_back( detect_enzdes_interface);
328 if( basic::options::option[basic::options::OptionKeys::enzdes::detect_design_interface].user() ){
331 taskfactory.push_back( catpack );
333 if( basic::options::option[basic::options::OptionKeys::enzdes::run_ligand_motifs].user() ){
337 PackerTaskOP task = taskfactory.create_task_and_apply_taskoperations( pose );
360 std::set < core::Size > designing_residues;
363 designing_residues.insert( jj );
368 -> set_designable_residues( designing_residues );
380 movemap->set_jump(
false );
381 movemap->set_chi(
false );
382 movemap->set_bb(
false );
388 if(
chi_min_ ) movemap->set_chi(i,
true);
390 allow_move_bb[i] =
true;
397 if (min_all_jumps) movemap->set_jump( i,
true );
399 core::Size upstream_jump_res, downstream_jump_res;
403 movemap->set_jump( i,
true );
417 tr.Info <<
"Doing a pose minimization... the backbone is allowed to move at positions: ";
420 movemap->set_bb(i,
true);
424 tr.Info << std::endl;
431 using namespace protocols::ligand_docking;
434 if (lig_min_stddev==0.0){
435 tr.Info<<
"**WARNING!! ligand minimization requested without specifying allowed deviation value!! Setting it to 10.0 degrees and allowing all torsions to minimize"<<std::endl;
436 lig_min_stddev= 10.0;
437 minimize_all_ligand_torsions =
true;
440 movemap->set_chi(lig_id,
true);
474 allow_move_bb_loop[i]=
true;
475 }
else if(allow_move_bb[i]){
476 allow_move_bb_ss[i]=
true;
489 bool minimize_after_packing,
490 bool pack_unconstrained,
504 for(
core::Size cycle = 1; cycle <= cycles; ++cycle){
508 bool soft_rep ( basic::options::option[basic::options::OptionKeys::packing::soft_rep_design] && usetask->design_any() && (cycle < cycles ) );
511 else packsfxn = scorefxn;
514 enzdes_pack->apply(pose);
523 if( basic::options::option[basic::options::OptionKeys::enzdes::favor_native_res].user() && favor_native){
531 if( task->design_any() ){
533 if( cstio ) cstio->update_pdb_remarks_for_backbone_params( pose );
542 bool allow_missing_remark_blocks
548 cstmover.
apply( pose );
550 tr.Info <<
"Catalytic residues (pose numbering) are: ";
554 tr.Info << std::endl;
568 cstmover.
apply( pose );
578 cstmover.
apply( pose );
604 if( task->pack_residue(i) && ( !
is_catalytic_position( pose, i ) ) ) positions_to_replace.push_back( i );
613 if(basic::options::option[basic::options::OptionKeys::enzdes::enz_debug] ){
618 min_scorefxn->reset();
637 dfpMinTightTol->apply(pose);
640 (*min_scorefxn)( pose );
643 stored_rb_min.apply( pose );
683 (*min_scorefxn)( pose );
685 if(basic::options::option[basic::options::OptionKeys::enzdes::enz_debug] ){
730 bool check_bb_clashes,
744 pos_it != ligs_to_exchange.end(); ++pos_it )
753 if( check_bb_clashes ){
770 if( accepted_rotamers.size() == 0 )
return false;
772 tr <<
"There are " << accepted_rotamers.size() <<
" rotamers that don't clash with the backbone." << std::endl;
780 for( std::vector< core::pose::RemarkInfo >::iterator rem_it = remarks.begin(); rem_it != remarks.end(); ++rem_it ){
782 std::string chainA(
""), resA(
""),chainB(
""),resB(
"");
784 int seqposA(0), seqposB(0);
787 bool line_changed(
false );
790 if( seqposA == (
int) *pos_it || seqposA == 0 ) {
796 if( seqposB == (
int) *pos_it || seqposB == 0 ) {
831 using namespace core::scoring;
833 for( std::set< core::Size >::const_iterator des_it =
design_targets_.begin();
863 ligrot_poses.clear();
869 if( orig_pose.
residue( i ).
name3() != basic::options::option[ basic::options::OptionKeys::enzdes::process_ligrot_separately ].value() )
continue;
875 rot_it != accepted_rotamers.end(); ++rot_it ){
878 lig_pose->replace_residue( i, **rot_it,
true );
880 ligrot_poses.push_back( lig_pose );
895 bool switch_info_found(
false );
897 utility::io::izstream filedata( filename.c_str() );
898 std::istringstream line_stream;
902 std::cerr <<
"ERROR:: Unable to open ligand superposition info file: "
903 << filename << std::endl;
907 while( !filedata.eof() ) {
909 getline(filedata,line);
911 line_stream.str(line);
914 if( key ==
"SWITCH_NAME" ){
917 switch_info_found =
true;
921 if( key ==
"SUPERIMPOSE" ){
924 line_stream >> buf1 >> buf2;
930 if( !switch_info_found ){
931 utility_exit_with_message(
"Error: "+filename+
" does not specify which residues to switch!");
935 utility_exit_with_message(
"Error: "+filename+
" specifies less than 3 atoms to superimpose on, unambiguous superposition not possible");
938 tr <<
"read superposition info from " << filename <<
" ...";