52 #include <basic/options/option.hh>
53 #include <basic/options/keys/RBSegmentRelax.OptionKeys.gen.hh>
54 #include <basic/options/keys/loops.OptionKeys.gen.hh>
55 #include <basic/options/keys/constraints.OptionKeys.gen.hh>
56 #include <basic/options/keys/relax.OptionKeys.gen.hh>
58 #include <basic/Tracer.hh>
65 #include <utility/vector0.hh>
66 #include <utility/vector1.hh>
70 namespace rbsegment_relax {
72 basic::Tracer
TS(
"protocols.moves.RBSegmentRelax");
84 Mover(
"RBSegmentRelax"),
85 scorefxn_( scorefxn ),
86 rbsegs_input_( rbsegs_input ),
87 loops_input_( loops_input )
89 using namespace basic::options;
99 cycles_ = option[ OptionKeys::RBSegmentRelax::nrbmoves ]();
109 cst_weight_ = option[ OptionKeys::constraints::cst_weight ]();
110 cst_width_ = option[ OptionKeys::relax::coord_cst_width ]();
111 cst_stdev_ = option[ OptionKeys::relax::coord_cst_stdev ]();
112 cst_seqwidth_ = option[ OptionKeys::RBSegmentRelax::cst_seqwidth ]();
124 using namespace basic::options;
127 if (! option[ OptionKeys::RBSegmentRelax::skip_seqshift_moves ]() ) {
132 if (! option[ OptionKeys::RBSegmentRelax::skip_rb_moves ]() ) {
187 using namespace basic::options;
199 TS <<
"LOOPS-REMOVED fold tree " << pose_noloops.fold_tree() << std::endl;
200 TS <<
"LOOPS-REMOVED secstruct " << pose_noloops.secstruct() << std::endl;
210 bool doFragInserts=
false;
212 if ( option[ OptionKeys::loops::vall_file ].user() && !option[ OptionKeys::RBSegmentRelax::skip_fragment_moves ]() ) {
215 doFragInserts =
true;
218 frag_ins->bootstrapCATrace( pose_noloops );
222 task_fast->restrict_to_repacking(); task_fast->or_include_current(
false);
225 pack_fast.
apply( pose_noloops );
232 it_seg != it_seg_end; ++it_seg ) {
235 if ( doFragInserts ) {
236 SegmentRandomizeMover->add_mover( frag_ins );
244 it_mover != it_mover_end; ++it_mover ) {
245 SegmentRandomizeMover->add_mover( *it_mover );
251 if( it_seg->isHelix() ) {
254 for ( std::vector< RBSegmentMoverOP >::iterator it_mover =
HelixMoveSet_.begin(),
255 it_mover_end =
HelixMoveSet_.end(); it_mover != it_mover_end; ++it_mover ) {
257 moverToAdd->setResidueRange( *it_seg );
258 if ( it_seg->initialized() ) moverToAdd->set_movement(*it_seg);
259 SegmentRandomizeMover->add_mover( moverToAdd );
265 }
else if ( it_seg->isSheet() ) {
268 for ( std::vector< RBSegmentMoverOP >::iterator it_mover =
StrandMoveSet_.begin(),
269 it_mover_end =
StrandMoveSet_.end(); it_mover != it_mover_end; ++it_mover ) {
271 if ( it_seg->initialized() ) moverToAdd->set_movement(*it_seg);
272 moverToAdd->setResidueRange( *it_seg );
273 SegmentRandomizeMover->add_mover( moverToAdd );
279 }
else if ( it_seg->isGenericRB() ) {
283 for ( std::vector< RBSegmentMoverOP >::iterator it_mover =
GenericRBMoveSet_.begin(),
286 moverToAdd->setResidueRange( *it_seg );
287 if ( it_seg->initialized() ) moverToAdd->set_movement(*it_seg);
288 SegmentRandomizeMover->add_mover( moverToAdd );
294 }
else if ( it_seg->isCompound() ) {
295 if (! it_seg->initialized() ) {
303 moverToAdd->setResidueRange( *it_seg );
304 if ( it_seg->initialized() ) moverToAdd->set_movement(*it_seg);
305 SegmentRandomizeMover->add_mover( moverToAdd );
312 TS <<
"[ ERROR ] Unknown segment type\n";
318 TS <<
"[ ERROR ] RBSegmentRelax::apply() caled with no segments or movers defined!\n";
325 taskstd->initialize_from_command_line();
326 taskstd->restrict_to_repacking();
327 taskstd->or_include_current(
true);
333 SegmentRandomizeMover->apply( pose_noloops );
337 pack.
apply( pose_noloops );
355 mc_->reset( pose_noloops );
356 mc_->set_temperature( temperature );
384 for (
int i=0; i<total_cycles; ++i) {
385 temperature *= gamma;
386 mc_->set_temperature( temperature );
389 SegmentRandomizeMover->apply( pose_noloops );
396 pack.
apply( pose_noloops );
397 mzr.run( pose_noloops, mm, *
scorefxn_, options2 );
400 mzr.run( pose_noloops, mm, *
scorefxn_, options1 );
404 (*scorefxn_)(pose_noloops);
407 if (
mc_->boltzmann( pose_noloops ) )
TS.Debug <<
" *";
408 TS.Debug << std::endl;
410 mc_->boltzmann( pose_noloops );
414 mc_->recover_low( pose_noloops );
415 mc_->show_counters();
430 it->set_start( it->start() - 1 );
432 it->set_stop( it->stop() + 1 );
436 loops->auto_choose_cutpoints( pose );
443 core::Size lstart = it->start(), lstop = it->stop();
446 pose.
set_phi( k, pose_input.phi(k) );
447 pose.
set_psi( k, pose_input.psi(k) );
448 pose.
set_omega( k, pose_input.omega(k) );
457 remodel =
"quick_ccd";
459 intermedrelax =
"no";
463 if ( option[ OptionKeys::loops::remodel ].user() )
464 remodel = option[ OptionKeys::loops::remodel ]();
465 if ( option[ OptionKeys::loops::intermedrelax ].user() )
466 intermedrelax = option[ OptionKeys::loops::intermedrelax ]();
467 if ( option[ OptionKeys::loops::refine ].user() )
468 refine = option[ OptionKeys::loops::refine ]();
469 if ( option[ OptionKeys::loops::relax ].user() )
470 relax = option[ OptionKeys::loops::relax ]();
483 mover.
loops( loops );
484 mover.
relax( relax );
498 return "RBSegmentRelax";