48 #include <basic/options/option.hh>
51 #include <basic/options/keys/run.OptionKeys.gen.hh>
52 #include <basic/options/keys/fast_loops.OptionKeys.gen.hh>
57 #include <basic/Tracer.hh>
60 #include <utility/vector1.hh>
68 static basic::Tracer
tr(
"protocols.loops.loop_closure.ccd.WidthFirstSlidingWindowLoopClosure");
72 namespace loop_closure {
77 using namespace fragment;
96 return "WidthFirstSlidingWindowLoopClosure";
100 using namespace basic::options;
101 using namespace basic::options::OptionKeys;
110 vdw_delta_ = option[ fast_loops::vdw_delta ]();
111 give_up_ = option[ fast_loops::give_up ]();
113 chainbreak_max_ = basic::options::option[ basic::options::OptionKeys::fast_loops::chainbreak_max ]();
114 tr.Info <<
"WidthFirstSlidingWindowLoopClosure::defaults " << std::endl;
118 using namespace basic::options;
119 using namespace basic::options::OptionKeys;
121 option.add_relevant( fast_loops::window_accept_ratio );
122 option.add_relevant( fast_loops::nr_scored_sampling_passes );
123 option.add_relevant( fast_loops::nr_scored_fragments );
124 option.add_relevant( fast_loops::min_breakout_good_loops );
125 option.add_relevant( fast_loops::min_breakout_fast_loops );
126 option.add_relevant( fast_loops::min_good_loops );
127 option.add_relevant( fast_loops::min_fast_loops );
128 option.add_relevant( fast_loops::vdw_delta );
129 option.add_relevant( fast_loops::give_up );
136 if( basic::options::option[ basic::options::OptionKeys::run::test_cycles ]() ){
154 tr.Debug <<
"Trying loop-sizes: " <<
loop_ << std::endl;
159 tr.Debug <<
"Trying loop-sizes: "
166 tr.Debug <<
"LOOP: " <<
loop_ << std::endl;
168 Size fast_loop_count( 0 );
169 Size good_loop_count( 0 );
170 Size scored_frags_attempted( 0 );
176 tr.Debug <<
"Trying loop-sizes: " <<
loop_ << std::endl;
177 tr.Info <<
"---------------- LOOP SAMPLING based on this scorefunction: ----------------\n";
178 if (
tr.Info.visible() ) frag_scorefxn->show(
tr.Info, more_cut );
179 tr.Info << std::endl;
181 tr.Debug <<
"Trying loop-sizes: " <<
loop_ << std::endl;
182 tr.Info <<
"---------------- LOOP SELECTION based on this scorefunction: ----------------\n";
183 if (
tr.Info.visible() )
scorefxn_->show(
tr.Info, more_cut );
184 tr.Info << std::endl;
192 tr.Debug <<
"MOREFOLDTREE: " << more_cut.
fold_tree();
193 tr.Debug <<
"LESSFOLDTREE: " << less_cut.
fold_tree();
198 tr.Debug <<
"CAPTURE INITIAL POSE LOOPS" << std::endl;
199 using namespace fragment;
201 FrameList closure_frames;
202 closure_frame->steal( more_cut );
205 fast_ccd.
apply( more_cut );
207 closure_frame->steal( more_cut );
210 closure_frames.push_back( closure_frame );
213 fast_loop_count = good_loop_count;
214 tr.Debug <<
"INITIAL POSE yielded " << good_loop_count <<
" valuable conformations " << std::endl;
223 loop_size <= std::min( actual_max_loop_size,
max_loop_size_ ); ++loop_size ) {
224 tr.Debug <<
"loop-size: " << loop_size << std::endl;
234 for ( WindowList::const_iterator it = windows.begin(), eit = windows.end();
240 Loop const current_loop = it->second;
241 tr.Debug <<
"attempt closure on " << current_loop << std::endl;
243 tr.Info <<
" unscored (vdw only) fragment sampling... " << current_loop << std::endl;
247 if ( fast_closure.
apply( more_cut ) ) {
251 tr.Info <<
"good window keep this for scored sampling stage" << std::endl;
252 probable_windows.push_back( *it );
254 fast_loop_count += new_loops;
263 tr.Info <<
"finished unscored sampling: loops found: " << fast_loop_count <<
" (needs " <<
min_fast_loops_
264 <<
" ) good windows: " << probable_windows.size() <<
" min_breakout_good_loops " << min_breakout_good_loops << std::endl;
266 if ( good_loop_count >= min_breakout_good_loops )
break;
267 if ( scored_frags_attempted >
give_up_ && good_loop_count == 0 )
break;
269 for ( WindowList::const_iterator it = probable_windows.begin(),
270 eit = probable_windows.end(); it != eit; ++it ) {
272 if ( good_loop_count >= min_breakout_good_loops )
break;
273 if ( scored_frags_attempted >
give_up_ && good_loop_count == 0 )
break;
278 Loop const current_loop = it->second;
280 tr.Info <<
"scored fragment sampling on ... " << current_loop << std::endl;
291 tr.Info <<
"process fragments... GoodLoops: " << good_loop_count << std::endl;
296 tr.Info <<
"finished sampling... Good scored Loops: " << good_loop_count <<
" required: " <<
min_good_loops_
297 <<
"good loops: " << fast_loop_count+good_loop_count <<
" ( " <<
min_fast_loops_ <<
" ) " << std::endl;
300 tr.Warning <<
"WARNING: no good loop found !" << std::endl;