Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SymDockingHiRes.cc
Go to the documentation of this file.
1 // -*- mode:c++;tab-width:2;indent-tabs-mode:t;show-trailing-whitespace:t;rm-trailing-spaces:t -*-
2 // vi: set ts=2 noet:
3 //
4 // (c) Copyright Rosetta Commons Member Institutions.
5 // (c) This file is part of the Rosetta software suite and is made available under license.
6 // (c) The Rosetta software is developed by the contributing members of the Rosetta Commons.
7 // (c) For more information, see http://www.rosettacommons.org. Questions about this can be
8 // (c) addressed to University of Washington UW TechTransfer, email: license@u.washington.edu.
9 
10 /// @file SymDockingHiRes
11 /// @brief protocols that are specific to high resolution docking
12 /// @detailed
13 /// This contains the functions that create initial positions for docking
14 /// Also contains docking mcm protocol
15 /// @author Monica Berrondo
16 /// @author Modified by Sergey Lyskov
17 /// @author Modified by Sid Chaudhury
18 /// @author Modified by Jacob Corn
19 /// @author ingemar André. Based on the standard docking protocol
20 
23 
24 // Rosetta Headers
26 
27 // AUTO-REMOVED #include <core/conformation/Interface.hh>
28 
29 #include <basic/options/option.hh>
30 
35 // AUTO-REMOVED #include <protocols/toolbox/task_operations/RestrictChainToRepackingOperation.hh>
36 #include <core/conformation/Residue.hh> // for design() flag
38 // AUTO-REMOVED #include <core/pack/task/operation/OperateOnCertainResidues.hh>
39 // AUTO-REMOVED #include <core/pack/task/operation/ResLvlTaskOperations.hh> // PreventRepackingRLT
40 // AUTO-REMOVED #include <core/pack/task/operation/ResFilters.hh> // ResidueLacksProperty
43 
44 #include <core/pose/Pose.hh>
45 // AUTO-REMOVED #include <core/pose/PDBInfo.hh>
47 
53 // AUTO-REMOVED #include <core/conformation/symmetry/util.hh>
54 
56 
59 #include <protocols/moves/Mover.hh>
62 // AUTO-REMOVED #include <protocols/moves/OutputMovers.hh>
64 // AUTO-REMOVED #include <protocols/simple_moves/RotamerTrialsMinMover.hh>
68 // AUTO-REMOVED #include <protocols/moves/ChangeFoldTreeMover.hh>
70 //for resfile reading
71 #include <basic/options/keys/packing.OptionKeys.gen.hh>
72 
73 // AUTO-REMOVED #include <protocols/loops/loops_main.hh>
74 // AUTO-REMOVED #include <protocols/loops/Loops.hh>
75 // AUTO-REMOVED #include <protocols/loops/LoopMover.fwd.hh>
76 // AUTO-REMOVED #include <protocols/loops/LoopMover_KIC.hh>
77 // AUTO-REMOVED #include <protocols/loops/LoopMover_Backrub.hh>
78 // AUTO-REMOVED #include <protocols/loops/LoopMover_CCD.hh>
79 
80 // ObjexxFCL Headers
81 #include <ObjexxFCL/string.functions.hh>
82 
83 // C++ Headers
84 #include <string>
85 
86 #include <numeric/trig.functions.hh>
87 #include <numeric/xyzMatrix.fwd.hh>
88 
89 // AUTO-REMOVED #include <utility/tag/Tag.hh> // REQUIRED FOR WINDOWS
90 
91 #include <basic/Tracer.hh>
92 using basic::T;
93 
94 // option key includes
95 
96 #include <basic/options/keys/docking.OptionKeys.gen.hh>
97 
98 #include <utility/vector0.hh>
99 #include <utility/vector1.hh>
100 
101 
102 using basic::Error;
103 using basic::Warning;
104 
105 static basic::Tracer TR("protocols.symmetric_docking.SymDockingHiRes");
106 
107 using namespace core;
108 
109 namespace protocols {
110 namespace symmetric_docking {
111 
112 // default constructor
113 SymDockingHiRes::SymDockingHiRes() : Mover()
114 {
117  moves::Mover::type( "SymDockingHiRes" );
118  init_task_factory_=NULL;
119  design_ = false;
120 }
121 
122 // constructor with arguments
124  core::scoring::ScoreFunctionOP scorefxn_in,
125  core::scoring::ScoreFunctionOP scorefxn_pack_in
126 ) : Mover(), scorefxn_(scorefxn_in), scorefxn_pack_(scorefxn_pack_in)
127 {
128  moves::Mover::type( "SymDockingHRes" );
129  init_task_factory_=NULL;
130  design_ = false;
131 }
132 
133 //destructor
135 
136 //clone
138  return new SymDockingHiRes(*this);
139 }
140 // what type of minimization is used?
141 void SymDockingHiRes::set_min_type( std::string min_type_in ) { min_type_ = min_type_in;}
142 
143 // repack sidechains during docking?
144 void SymDockingHiRes::set_repack( bool repack_switch){ repack_switch_ = repack_switch;}
145 
146 // pointer to mc object
148 
149 // set the packer task
150 void
152 {
153  init_task_factory_ = task;
154 }
155 
158  return init_task_factory_;
159 }
160 
161 // Use design during docking. Currently not tested...
162 void SymDockingHiRes::design( bool const des ) {
163  design_ = des;
164 }
165 
166 // Are we designing during the docking procedure
167 bool SymDockingHiRes::design() const { return design_; }
168 
169 // Set default values for the docking protocol
171  using namespace basic::options;
172  using namespace core::pack::task;
173  using namespace core::pack::task::operation;
174 
175  // SETS UP the stuff in pose
176  (*scorefxn_)( pose );
177 
178  // Get the docking translation and rotation magnitutes from command line. If
179  // none is given the default values of 0.1 A and 5 degrees are used
180  trans_magnitude_ = option[ OptionKeys::docking::dock_mcm_trans_magnitude ]();
181  rot_magnitude_ = option[ OptionKeys::docking::dock_mcm_rot_magnitude ]();
182  // use rtmin_ and sc_min. rtmin for symmetry is not implemented?! Turned off // for now. The flag is still here which adds to the confusion.
183 
184  rtmin_ = option[ OptionKeys::docking::dock_rtmin ]();
185  scmin_ = option[ OptionKeys::docking::sc_min ]();
186 
187  temperature_ = 0.8;
188  repack_switch_ = true;
189  repack_period_ = 8;
190 
191  //sets up MC object
192  mc_ = new moves::MonteCarlo( pose, *scorefxn_, temperature_ );
193 
194  //sets up default movemap
195  bb_ = false;
196  chi_ = false;
198  movemap_->set_chi( chi_ );
199  movemap_->set_bb( bb_ );
201 
202  //sets up minimization parameters
203  min_tolerance_ = 0.01;
204  min_type_ = std::string( "dfpmin_armijo_nonmonotone" );
205  nb_list_ = true;
206 
207  setup_packing( pose );
208 
209  //set up docking protocol based on options
210  set_protocol( pose );
211  }
212 
213 // Set the movemap
215 
216 // define which protocol is used...
218  using namespace basic::options;
219 
220  if ( option[ OptionKeys::docking::dock_min ]() ) {
222  }
223  else if ( option[ OptionKeys::docking::dock_ppk ]() ){
224  set_dock_ppk_protocol( pose );
225  }
226 
227  else {
228  set_dock_mcm_protocol( pose );
229  }
230 }
231 
232 /*void SymDockingHiRes::define_loops( pose::Pose const & pose, loops::Loops & loop_set, Real & interface_dist ) {
233  //runtime_assert( movable_jumps_.size() == 1 ); // CURRENTLY ONLY SUPPORTED WITH SIMPLE DOCKING
234  //core::Size const rb_jump = movable_jumps_[1];
235 
236  loop_set.clear();
237 
238  using namespace core::pack::task;
239  using namespace core::pack::task::operation;
240  //RestrictTaskForDockingOP rtfd = new RestrictTaskForDocking( scorefxn_, rb_jump_, true, interface_dist );
241  pack::task::TaskFactory tf;
242  //tf.push_back( rtfd );
243  //tf.push_back( new RestrictTaskForDocking( scorefxn_, rb_jump_, true, interface_dist ) );
244  tf.push_back( new RestrictToInterface( movable_jumps_, interface_dist ) );
245  pack::task::PackerTaskOP task = tf.create_task_and_apply_taskoperations( pose );
246 
247  // extend one residue beyond borders of repackable regions, don't allow 1-residue loops
248  core::Size const nres = pose.total_residue();
249  utility::vector1<bool> flexible_region( nres, false );
250  for ( Size i=2; i < nres; ++i ) {
251  int num_flexible(0);
252  if ( pose.pdb_info()->chain(i-1) == pose.pdb_info()->chain(i+1) ) {
253  if ( task->pack_residue(i-1) ) ++num_flexible;
254  if ( task->pack_residue(i) ) ++num_flexible;
255  if ( task->pack_residue(i+1) ) ++num_flexible;
256  }
257  if ( num_flexible > 1 ) {
258  flexible_region.at(i-1) = true;
259  flexible_region.at(i) = true;
260  flexible_region.at(i+1) = true;
261  }
262  }
263 
264  // if we have a single fixed residue between two loops, make this flexible
265  for ( Size i=2; i < nres; ++i ) {
266  if ( flexible_region.at(i-1) && flexible_region.at(i+1) ) flexible_region.at(i) = true;
267  }
268 
269  // jk For now, don't let the first or last two residues of a chain be flexible
270  flexible_region.at(1) = false;
271  flexible_region.at(2) = false;
272  for ( Size i=3; i < (nres-1); ++i ) {
273  if ( pose.pdb_info()->chain(i-1) != pose.pdb_info()->chain(i) ) {
274  flexible_region.at(i-2) = false;
275  flexible_region.at(i-1) = false;
276  flexible_region.at(i) = false;
277  flexible_region.at(i+1) = false;
278  }
279  }
280  flexible_region.at(nres-1) = false;
281  flexible_region.at(nres) = false;
282 
283  // disallow one-residue loops
284  for ( Size i=2; i < nres; ++i ) {
285  if ( ( ! flexible_region.at(i-1)) && ( ! flexible_region.at(i+1)) ) flexible_region.at(i) = false;
286  }
287  // disallow two-residue loops
288  for ( Size i=3; i < nres; ++i ) {
289  if ( ( ! flexible_region.at(i-2)) && ( ! flexible_region.at(i+1)) ) {
290  flexible_region.at(i-1) = false;
291  flexible_region.at(i) = false;
292  }
293  }
294 
295  // setup loops
296  core::Size loop_start=0;
297  core::Size loop_stop=0;
298  for ( Size i=1; i < nres; ++i ) {
299  if ( flexible_region.at(i) ) {
300  loop_start = i;
301  loop_stop = i;
302  for ( Size j=i+1; j <= nres; ++j ) {
303  // if j is on a different chain than i, break
304  if ( pose.pdb_info()->chain(j) != pose.pdb_info()->chain(i) ) {
305  break;
306  }
307  // if j is not flexible, break
308  if ( ( ! flexible_region.at(j) ) ) {
309  break;
310  }
311  loop_stop = j;
312  }
313  loop_set.add_loop( loop_start, loop_stop, 0 );
314  i = loop_stop;
315  }
316  }
317 
318  loop_set.choose_cutpoints( pose );
319 
320  return;
321 } */
322 
323 
324 ////////////////////////////////////////////////////////////////////////////////
325 /// @begin docking high resolution apply function
326 /// @brief
327 /// @detailed
328 /// decides what to call according to options
330 {
331  using namespace scoring;
332  using namespace basic::options;
333 
334  TR << "in SymDockingHiRes.apply" << std::endl;
335 
336  // jec sanity check to avoid overwriting newly-set minimizers on every apply
337  if ( !mc_ ) {
338  set_default( pose );
339  }
340 
341  mc_->reset( pose );
342 
343  docking_highres_protocol_mover_->apply( pose );
344  mc_->recover_low( pose );
345 }
346 
349  return "SymDockingHiRes";
350 }
351 
352 ///////////////////////////////////////////////////////////////////////////////////
353 /// @begin minimize_trial
354 ///
355 /// @brief main entrance for normal rigid-body minimization
356 /// @detailed
357 /// retrieve the structure in the low array and do the normal minimization
358 /// by calling using a min_mover to optimize the score accourding to the
359 /// scorefunction that has been set
360 ///
361 /// @remarks
362 ///
363 /// @references docking_minimize_trial from docking_minimize.cc
364 /// pose_docking_minimize_trial from pose_docking.cc
365 ///
366 /// @authors Monica Berrondo June 14 2007, modified for symmetric docking by
367 /// Ingemar Andre
368 ///
369 /// @last_modified October 15 2007
370 /////////////////////////////////////////////////////////////////////////////////
372  using namespace moves;
373 
374  TR << "::::::::::::::::::DOCK_MIN:::::::::::::::::::" << std::endl;
375 
377  TrialMoverOP minimize_trial = new TrialMover( min_mover, mc_ );
378  docking_highres_protocol_mover_ = new SequenceMover;
379  docking_highres_protocol_mover_->add_mover( minimize_trial );
380 }
381 
382 ///////////////////////////////////////////////////////////////////////////////////
383 /// @begin dock_mcm_protocol
384 ///
385 /// @brief main entrance to do monte carlo minimization
386 /// @detailed
387 /// a total of 50 cycles of monte-carlo minimization will be
388 /// carried out if the minimized structure can pass the filter
389 /// after the first and fifth cycle. Then it is rigid-body minimized
390 /// to a stringent tolerance.
391 ///
392 /// @remarks
393 ///
394 /// @references docking_mcm_protocol from docking_minimize.cc
395 /// pose_docking_monte_carlo_minimize from pose_docking.cc
396 ///
397 /// @authors Sid Chaudhury May 28 2009, modified for symmetric docking
398 /// by Ingemar Andre
399 ///
400 /// @last_modified April 30 2008
401 /////////////////////////////////////////////////////////////////////////////////
403  using namespace moves;
404  using namespace basic::options;
405  using namespace core::pack::task;
406  using namespace core::pack::task::operation;
407  using namespace core::conformation::symmetry;
408  using namespace protocols::toolbox::task_operations;
409 
410  assert( core::pose::symmetry::is_symmetric( pose ));
411  SymmetricConformation & symm_conf (
412  dynamic_cast<SymmetricConformation & > ( pose.conformation()) );
413 
414  std::map< Size, SymDof > dofs ( symm_conf.Symmetry_Info()->get_dofs() );
415 
416  //set up rigid body movers
418 
419  //set up minimizer movers
421 
422  //set up sidechain movers for each movable jump
423  tf_->push_back( new RestrictToInterface( 1 ) );
424 
426 
427  SequenceMoverOP interface_repack_and_move_loops = new moves::SequenceMover;
428 
429  std::string const flex_bb_docking_type = option[ OptionKeys::docking::flexible_bb_docking ]();
430  if ( flex_bb_docking_type == "fixedbb" ) {
431  // Call pack_rotamers, no backbone movement
433  pack_interface_repack->task_factory(tf_);
434  interface_repack_and_move_loops->add_mover( pack_interface_repack );
435  } else {
436 
437  // Call pack_rotamer before and after loop movement
439  pack_interface_repack->task_factory(tf_);
440  interface_repack_and_move_loops->add_mover( pack_interface_repack );
441 
442  // This does not work for symmetry yet. Anyone is free to implement it...
443  if ( ( flex_bb_docking_type == "ccd" ) || ( flex_bb_docking_type == "kic" ) || ( flex_bb_docking_type == "backrub" ) ) {
444 
445 /* core::kinematics::FoldTree docking_fold_tree( pose.fold_tree() );
446  core::kinematics::FoldTree loop_fold_tree = docking_fold_tree;
447 
448  // jk Create a copy because we can't modify input pose, and we need energies and the docking fold tree
449  // Note: we need the docking fold tree so that we identify the correct "interface" when picking loops (ie. jump #1)
450  // jk For now, define loops based on the input structure
451  // (so that they're always the same, and we don't have to worry about relaxing a priori, akin to prepacking)
452  pose::Pose pose_for_loop_defn = *get_input_pose();
453  (*scorefxn_pack_)(pose_for_loop_defn);
454  pose_for_loop_defn.fold_tree( docking_fold_tree );
455 
456  protocols::loops::Loops loop_set;
457  Real interface_dist = option[ OptionKeys::docking::flexible_bb_docking_interface_dist ];
458  define_loops( pose_for_loop_defn, loop_set, interface_dist );
459 
460  loops::LoopMoverOP loop_refine;
461  if ( flex_bb_docking_type == "ccd" ) {
462  // jk CCD loop refinement (fullatom only)
463  TR << "Setting up for ccd loop modeling" << std::endl;
464  protocols::loops::fold_tree_from_loops( pose, loop_set, loop_fold_tree );
465  // need to pass a clone of the scorefxn because LoopMover requires a non-const scorefxn
466  loop_refine = new loops::LoopMover_Refine_CCD( loop_set, scorefxn_pack_->clone() );
467  } else if ( flex_bb_docking_type == "kic" ) {
468  // jk KIC loop refinement (fullatom only)
469  TR << "Setting up for kinematic (kic) loop modeling" << std::endl;
470  protocols::loops::fold_tree_from_loops( pose, loop_set, loop_fold_tree );
471  // need to pass a clone of the scorefxn because LoopMover requires a non-const scorefxn
472  loop_refine = new loops::LoopMover_Refine_KIC( loop_set, scorefxn_pack_->clone() );
473  } else if ( flex_bb_docking_type == "backrub" ) {
474  // jk backrub loop refinement (fullatom only)
475  TR << "Setting up for backrub loop modeling" << std::endl;
476  // jk backrub can't use segments that span a jump residue, so use a simple fold tree here
477  // note: this assumes that the termini are not allowed to move (and in define_loops they aren't)
478  loop_fold_tree.simple_tree( pose.total_residue() );
479  // need to pass a clone of the scorefxn because LoopMover requires a non-const scorefxn
480  loop_refine = new loops::LoopMover_Refine_Backrub( loop_set, scorefxn_pack_->clone() );
481  }
482 
483  moves::ChangeFoldTreeMoverOP get_loop_ft = new moves::ChangeFoldTreeMover( loop_fold_tree );
484  moves::ChangeFoldTreeMoverOP get_docking_ft = new moves::ChangeFoldTreeMover( docking_fold_tree );
485 
486  interface_repack_and_move_loops->add_mover( get_loop_ft );
487  interface_repack_and_move_loops->add_mover( loop_refine );
488  interface_repack_and_move_loops->add_mover( get_docking_ft );
489  */
490  TR << "[ ERROR ] flexible_bb_docking is not implemented for symmetric docking yet..." << std::endl;
491  exit(1);
492 
493  } else {
494  TR << "[ ERROR ] Unknown flexible_bb_docking type: " << flex_bb_docking_type << std::endl;
495  exit(1);
496  }
497 
498  interface_repack_and_move_loops->add_mover( pack_interface_repack );
499  }
500 
501 
502  TrialMoverOP pack_interface_and_move_loops_trial = new TrialMover( interface_repack_and_move_loops, mc_ );
503 
504 // protocols::simple_moves::RotamerTrialsMinMoverOP rtmin = new protocols::simple_moves::RotamerTrialsMinMover( scorefxn_pack_, tf_ );
505 // TrialMoverOP rtmin_trial = new TrialMover( rtmin, mc_ );
506 
507  //InterfaceSidechainMinMoverOP scmin_mover = new InterfaceSidechainMinMover(rb_jump_, scorefxn_pack_ );
509  TrialMoverOP scmin_trial = new TrialMover( scmin_mover, mc_ );
510 
511  // the standard mcm cycle : rb perturbation->rotamer trials->minimization->MC accept
512  SequenceMoverOP rb_mover = new SequenceMover;
513  rb_mover->add_mover( rb_perturb );
514  if ( repack_switch_ ) rb_mover->add_mover( pack_rottrial );
515 
516  core::Real minimization_threshold = 15.0;
517  JumpOutMoverOP rb_mover_min = new JumpOutMover( rb_mover, min_mover, scorefxn_, minimization_threshold );
518  TrialMoverOP rb_mover_min_trial = new TrialMover( rb_mover_min, mc_ );
519 
520  //every step (rb_mover_min_trial): the standard mcm cycle
521  //every 8th step (repack_step): standard mcm cycle + repacking
522  //try moving loops too, if desired
523 
524  SequenceMoverOP repack_step = new SequenceMover;
525  repack_step->add_mover(rb_mover_min_trial);
526 
527  if ( repack_switch_ ){
528  repack_step->add_mover( pack_interface_and_move_loops_trial );
529  // if (rtmin_) repack_step->add_mover(rtmin_trial);
530  if (scmin_) repack_step->add_mover(scmin_trial);
531  }
532 
533  CycleMoverOP rb_mover_min_trial_repack = new CycleMover;
534  for ( Size i=1; i<repack_period_; ++i ) rb_mover_min_trial_repack->add_mover( rb_mover_min_trial );
535  rb_mover_min_trial_repack->add_mover( repack_step );
536 
537  //set up initial repack mover
538  SequenceMoverOP initial_repack = new SequenceMover;
539  initial_repack->add_mover(pack_interface_and_move_loops_trial);
540  //if (rtmin_) initial_repack->add_mover(rtmin_trial);
541  if (scmin_) initial_repack->add_mover(scmin_trial);
542 
543  //set up initial and final min_trial movers for docking
544  TrialMoverOP minimize_trial = new TrialMover( min_mover, mc_ );
545 
546  //set up mcm cycles and mcm_repack cycles
547  RepeatMoverOP mcm_four_cycles = new RepeatMover( rb_mover_min_trial, 4 );
548  RepeatMoverOP mcm_fortyfive_cycles = new RepeatMover( rb_mover_min_trial_repack, 45 );
549  //set up protocol mover
550  TR << "::::::::::::::::::DOCK_MCM:::::::::::::::::::" << std::endl;
551 
552  docking_highres_protocol_mover_ = new SequenceMover;
553  if (repack_switch_) docking_highres_protocol_mover_->add_mover( initial_repack );
554  docking_highres_protocol_mover_->add_mover( minimize_trial );
555  docking_highres_protocol_mover_->add_mover( mcm_four_cycles );
556  docking_highres_protocol_mover_->add_mover( mcm_fortyfive_cycles );
557  docking_highres_protocol_mover_->add_mover( minimize_trial );
558 
559 }
560 
561 // noncost pose for load_unboundrot csts
562 // detup the options for packing including setup up the packer task
564  using namespace basic::options;
565  using namespace core::pack::task;
566  using namespace core::pack::task::operation;
567  //set upconstructor packer options
568  tf_ = new TaskFactory;
569  if( init_task_factory_ )
570  {
571  TR << "Using user-defined TaskFactory." << std::endl;
573  }
574  if( design_ ) {
575  TR << "Designing during docking" << std::endl;
576  }
577  else { // default case -- restrict everything to repacking.
578  tf_->push_back( new RestrictToRepacking );
579  }
580 // tf_->push_back( new OperateOnCertainResidues( new PreventRepackingRLT, new ResidueLacksProperty("PROTEIN") ) );
581  tf_->push_back( new InitializeFromCommandline );
582  tf_->push_back( new IncludeCurrent );
583  tf_->push_back( new NoRepackDisulfides );
584  if( option[OptionKeys::packing::resfile].user() ) tf_->push_back( new ReadResfile );
585 
586  // incorporating Ian's UnboundRotamer operation.
587  // note that nothing happens if unboundrot option is inactive!
589  unboundrot->initialize_from_command_line();
590  operation::AppendRotamerSetOP unboundrot_operation = new operation::AppendRotamerSet( unboundrot );
591  tf_->push_back( unboundrot_operation );
592  core::pack::dunbrack::load_unboundrot(pose); // adds scoring bonuses for the "unbound" rotamers, if any
593 
594  // note that RestrictToInterfaceOperation is added during set_dock_mcm_protocol
595 }
596 
597 /// define the prepacking protocol
599  using namespace moves;
600  using namespace basic::options;
601  using namespace core::pack::task;
602  using namespace core::pack::task::operation;
603  using namespace core::conformation::symmetry;
604 
605  assert( core::pose::symmetry::is_symmetric( pose ));
606  SymmetricConformation & symm_conf (
607  dynamic_cast<SymmetricConformation & > ( pose.conformation()) );
608 
609  std::map< Size, SymDof > dofs ( symm_conf.Symmetry_Info()->get_dofs() );
610 
611  TR << "::::::::::::::::::DOCK_PPK:::::::::::::::::::" << std::endl;
612 
613  //set up translate-by-axis movers
616  translate_away->step_size( 1000 );
617  translate_back->step_size( -1000 );
618 
619 
620  PackerTaskOP task = tf_->create_task_and_apply_taskoperations( pose ); // does not include restrict to interface
621 
623  //RotamerTrialsMinMoverOP rtmin_mover = new symmetry::SymRotamerTrialsMinMover( scorefxn_pack_, *task );
625 
626  // set up protocol
627  docking_highres_protocol_mover_ = new SequenceMover;
628  if (scmin_) docking_highres_protocol_mover_->add_mover( scmin_mover );
629  docking_highres_protocol_mover_->add_mover( translate_away );
630  docking_highres_protocol_mover_->add_mover( prepack_full_repack );
631  //if (rtmin_) docking_highres_protocol_mover_->add_mover( rtmin_mover );
632  if (scmin_) docking_highres_protocol_mover_->add_mover( scmin_mover );
633  docking_highres_protocol_mover_->add_mover( translate_back );
634 }
635 
636 
637 
638 } // namespace docking
639 } // namespace protocols