27 #include <basic/options/option.hh>
39 #include <basic/options/keys/run.OptionKeys.gen.hh>
46 #include <basic/Tracer.hh>
49 #include <numeric/random/random.hh>
60 #include <basic/options/keys/loops.OptionKeys.gen.hh>
61 #include <basic/options/keys/packing.OptionKeys.gen.hh>
63 #include <utility/vector0.hh>
64 #include <utility/vector1.hh>
65 #include <utility/keys/Key3Vector.hh>
73 namespace loop_mover {
79 static numeric::random::RandomGenerator
RG(42678);
81 static basic::Tracer
TR(
"protocols.loops..LoopMover_Refine_Backrub");
121 using namespace core;
122 using namespace scoring;
123 using namespace basic::options;
131 int const fast = option[OptionKeys::loops::fast];
133 if ( option[ OptionKeys::loops::outer_cycles ].user() ) {
134 outer_cycles = option[ OptionKeys::loops::outer_cycles ]();
136 if ( option[ OptionKeys::run::test_cycles ]() ) {
139 int max_inner_cycles( 200 );
140 if ( option[ OptionKeys::loops::max_inner_cycles ].user() ) {
141 max_inner_cycles = option[ OptionKeys::loops::max_inner_cycles ]();
143 if ( option[ OptionKeys::run::test_cycles ]() ) {
144 max_inner_cycles = 2;
147 int const inner_cycles = std::min(
Size(max_inner_cycles), fast ? (
Size)(
loops()->loop_size() ) : 10 * (
Size)(
loops()->loop_size() ) );
148 int repack_period = 20;
149 if ( option[ OptionKeys::loops::repack_period ].user() ) {
150 repack_period = option[ OptionKeys::loops::repack_period ]();
153 int ntrials_per_cycle = 10;
154 if ( option[ OptionKeys::loops::backrub_trials ].user() ) {
155 ntrials_per_cycle = option[ OptionKeys::loops::backrub_trials ]();
171 backrubmover.clear_segments();
173 backrubmover.set_input_pose( input_poseOP );
179 for (
core::Size seg_start = it->start(); seg_start <= it->stop(); ++seg_start ) {
180 is_loop[seg_start] =
true;
181 for (
core::Size seg_end = seg_start + 2; seg_end <= it->stop(); ++seg_end ) {
185 backrubmover.add_segment( start_atom_id, end_atom_id, 0 );
191 backrubmover.optimize_branch_angles( pose );
195 float const init_temp( option[ OptionKeys::loops::refine_init_temp ]() );
196 float const final_temp( option[ OptionKeys::loops::refine_final_temp ]() );
197 float const gamma = std::pow( (final_temp/init_temp), 1.0f/(outer_cycles*inner_cycles) );
198 float temperature = init_temp;
204 bool const fix_natsc = option[OptionKeys::loops::fix_natsc];
206 using namespace pack::task;
211 task_factory->push_back(
new operation::InitializeFromCommandline );
212 task_factory->push_back(
new operation::IncludeCurrent );
213 if ( option[ OptionKeys::packing::resfile ].user() ) {
216 tr() <<
"Activating design" << std::endl;
223 for (
Size i=1; i<= nres; ++i ) {
224 if ( !is_loop[i] ) base_packer_task->nonconst_residue_task( i ).restrict_to_repacking();
228 base_packer_task->restrict_to_repacking();
230 base_packer_task->set_bump_check(
true );
237 this_packer_task->restrict_to_residues( allow_repacked );
243 std::string backrub_move_type = backrubmover.type();
244 for (
int i=1; i<=outer_cycles; ++i) {
245 tr() <<
"loopmover backrub outer refinement cycle " << i << std::endl;
249 for (
int j=1; j<=inner_cycles; ++j ) {
250 temperature *= gamma;
253 for (
int trial = 1; trial <= ntrials_per_cycle; ++trial ) {
254 backrubmover.apply(pose);
259 if ( (j%repack_period)==0 || j==inner_cycles ) {
265 this_packer_task->restrict_to_residues( allow_repacked );
279 return "LoopMover_Refine_Backrub";
294 return "LoopMover_Refine_Backrub";