30 #include <basic/options/option.hh>
39 #include <ObjexxFCL/string.functions.hh>
47 #include <numeric/trig.functions.hh>
48 #include <numeric/xyzMatrix.fwd.hh>
50 #include <basic/Tracer.hh>
51 #include <utility/tools/make_vector1.hh>
52 #include <utility/tag/Tag.hh>
57 #include <basic/options/keys/docking.OptionKeys.gen.hh>
59 #include <utility/excn/Exceptions.hh>
60 #include <utility/vector1.hh>
65 static basic::Tracer
TR(
"protocols.docking.DockingInitialPerturbation");
76 DockingInitialPerturbationCreator::keyname()
const
78 return DockingInitialPerturbationCreator::mover_name();
82 DockingInitialPerturbationCreator::create_mover()
const
88 DockingInitialPerturbationCreator::mover_name()
90 return "DockingInitialPerturbation";
108 DockingInitialPerturbation::DockingInitialPerturbation()
112 rigid_body_info_( NULL )
126 rigid_body_info_( NULL )
129 movable_jumps_ = utility::tools::make_vector1<core::Size>(rb_jump);
140 movable_jumps_( movable_jumps ),
141 rigid_body_info_( NULL )
184 using namespace basic::options;
185 TR <<
"Reading options..." << std::endl;
187 if ( option[ OptionKeys::docking::randomize1 ].user() )
190 if ( option[ OptionKeys::docking::randomize2 ].user() )
193 if ( option[ OptionKeys::docking::dock_pert ].user() )
197 if ( option[ OptionKeys::docking::uniform_trans ].user() )
200 if ( option[ OptionKeys::docking::spin ].user() )
201 set_spin(option[ OptionKeys::docking::spin ]());
203 if ( option[ OptionKeys::docking::center_at_interface ].user() )
204 set_center(option[ OptionKeys::docking::center_at_interface ]());
210 using namespace basic::options;
212 option.add_relevant( OptionKeys::docking::randomize1 );
213 option.add_relevant( OptionKeys::docking::randomize2 );
214 option.add_relevant( OptionKeys::docking::dock_pert );
215 option.add_relevant( OptionKeys::docking::uniform_trans );
216 option.add_relevant( OptionKeys::docking::spin );
217 option.add_relevant( OptionKeys::docking::center_at_interface );
243 TR.Debug <<
"finished reading movable_jumps_ from RigidBodyInfo" << std::endl;
245 utility_exit_with_message(
"DockSetupMover has to be applied before DockingInitialPerturbation !" );
254 TR.Debug <<
"movable_jumps_ value in apply:" << *it << std::endl;
261 using namespace moves;
264 TR <<
"randomize1: true" << std::endl;
269 TR <<
"randomize2: true" << std::endl;
281 TR <<
"dock_pert: true" << std::endl;
287 TR <<
"option[ docking::dock_pert ]()" << pert_mags[
rot] <<
' ' << pert_mags[
trans] << std::endl;
291 mover->apply( pose );
296 TR <<
"uniform_trans: " << mag << std::endl;
301 TR <<
"axis_spin: true" << std::endl;
309 TR.Debug <<
"centroid mode, DockingSlideIntoContact applied" << std::endl;
313 TR.Debug <<
"fa-standard mode, FaDockingSlideIntoContact applied" << std::endl;
320 return "DockingInitialPerturbation";
331 if ( !data_map.
has(
"RigidBodyInfo",
"docking_setup" ) ) {
332 TR <<
"RigidBodyInfo not found in DataMap" << std::endl;
338 TR.Debug <<
"get RigidBodyInfo pointer from DataMap" << std::endl;
341 if ( tag->hasOption(
"randomize1" ) ) {
345 if ( tag->hasOption(
"randomize2" ) ) {
349 if ( tag->hasOption(
"dock_pert" ) && tag->getOption<
bool>(
"dock_pert" ) ) {
355 if ( tag->hasOption(
"uniform_trans" ) ) {
359 if ( tag->hasOption(
"spin" ) ) {
360 set_spin( tag->getOption<
bool>(
"spin" ) );
363 if ( tag->hasOption(
"center_at_interface" ) ) {
364 set_center( tag->getOption<
bool>(
"center_at_interface" ) );
367 slide_ = tag->getOption<
bool>(
"slide", true );
374 using namespace core::scoring;
386 using namespace core::scoring;
398 using namespace moves;
401 ( *scorefxn_ )( pose );
403 TR <<
"sliding into contact" << std::endl;
404 TR <<
"Moving away" << std::endl;
410 ( *scorefxn_ )( pose );
413 if( counter > counter_breakpoint ){
414 TR<<
"failed moving away with original vector. Aborting DockingSlideIntoContact."<<std::endl;
420 TR <<
"Moving together" << std::endl;
424 ( *scorefxn_ )( pose );
427 if( counter > counter_breakpoint ){
428 TR<<
"moving together failed. Aborting DockingSlideIntoContact."<<std::endl;
439 return "DockingSlideIntoContact";
445 os <<
"Jump number: " << mover.
get_jump_num() << std::endl;
471 Mover(), rb_jumps_(rb_jumps),tolerance_(0.2){
482 using namespace core::scoring;
487 (*scorefxn_)( pose );
489 bool are_touching =
false;
518 trans_mover->trans_axis( trans_mover->trans_axis().negate() );
519 trans_mover->step_size(stepsize);
530 trans_mover->apply( pose );
532 (*scorefxn_)( pose );
535 are_touching = (std::abs(initial_fa_rep - push_together_fa_rep) > 1e-4);
541 }
while( counter <= counter_breakpoint && !are_touching );
542 if( counter > counter_breakpoint ){
543 TR<<
"Failed Fadocking Slide Together. Aborting."<<std::endl;
551 trans_mover->trans_axis( trans_mover->trans_axis().negate() );
552 trans_mover->apply( pose );
559 return "FaDockingSlideTogether";