50 #include <basic/options/option.hh>
51 #include <basic/datacache/BasicDataCache.hh>
52 #include <basic/datacache/CacheableData.hh>
53 #include <basic/options/keys/OptionKeys.hh>
54 #include <basic/options/keys/abinitio.OptionKeys.gen.hh>
55 #include <basic/options/keys/score.OptionKeys.gen.hh>
56 #include <basic/options/keys/loops.OptionKeys.gen.hh>
57 #include <basic/options/keys/out.OptionKeys.gen.hh>
59 #include <basic/options/keys/run.OptionKeys.gen.hh>
60 #include <basic/options/keys/abrelax.OptionKeys.gen.hh>
61 #include <basic/Tracer.hh>
62 #include <basic/MemTracer.hh>
63 #include <numeric/random/random.hh>
65 #include <utility/vector1.hh>
68 static basic::Tracer
tr(
"protocols.general_abinitio", basic::t_info);
70 static numeric::random::RandomGenerator
RG(1981221134);
78 topology_broker_( NULL ),
79 sampling_protocol_( NULL ),
80 loop_closure_protocol_( NULL ),
81 relax_protocol_( NULL ),
82 post_loop_closure_protocol_( NULL ),
83 b_return_unrelaxed_fullatom_( false )
85 basic::mem_tr <<
"AbrelaxMover CStor start" << std::endl;
87 basic::mem_tr <<
"AbrelaxMover CStor end" << std::endl;
101 using namespace basic::options;
119 if ( option[ OptionKeys::loops::idealize_before_loop_close ].user() ) {
121 idealizer->fast(
false );
126 if ( option[ OptionKeys::abinitio::close_loops ]() ) {
129 if ( option[ OptionKeys::loops::alternative_closure_protocol ]() ) {
130 closure_method =
new WidthFirstSlidingWindowLoopClosure;
133 bIdeal = !option[ OptionKeys::loops::non_ideal_loop_closing ]();
137 closure_method->scored_frag_cycle_ratio( option[ OptionKeys::loops::scored_frag_cycles ]() );
138 closure_method->short_frag_cycle_ratio( option[ OptionKeys::loops::short_frag_cycles ]() );
139 closure_method->set_bIdealLoopClosing( bIdeal );
140 closure_method->set_chainbreak_max( option[ OptionKeys::loops::chainbreak_max_accept ]() );
147 if ( option[ OptionKeys::loops::idealize_after_loop_close ].user() ) {
149 idealizer->fast(
false );
155 if ( !bIdeal ) option[ basic::options::OptionKeys::out::file::silent_struct_type ].def(
"binary");
161 if (
relax_protocol() && option[ OptionKeys::run::test_cycles ] ) {
213 using namespace basic::options;
219 basic::mem_tr <<
"AbrelaxMover::apply" << std::endl;
226 if( ! checkpoints.recover_checkpoint( pose,
get_current_tag(),
"rg_state") ){
243 replonly.
apply( pose );
248 #ifdef BOINC_GRAPHICS
249 protocols::boinc::Boinc::attach_graphics_current_pose_observer( pose );
256 #ifdef BOINC_GRAPHICS
257 protocols::boinc::Boinc::attach_graphics_current_pose_observer( pose );
272 bool loop_success =
true;
274 #ifdef BOINC_GRAPHICS
275 protocols::boinc::Boinc::attach_graphics_current_pose_observer( pose );
285 tr.Info <<
"abrelax_stage: pre_loopclosing (i.e., idealize) for " <<
get_current_tag() << std::endl;
298 if ( checkpoints.recover_checkpoint( pose,
get_current_tag(),
"loops_S",
false ,
true )) {
301 }
else if ( checkpoints.recover_checkpoint( pose,
get_current_tag(),
"loops_C",
false ,
true )) {
304 loop_success =
false;
307 tr <<
"AbrelaxMover: start loops" << std::endl;
322 loop_success =
false;
323 if ( option[ OptionKeys::abrelax::fail_unclosed ]() )
return;
331 tr.Info <<
"abrelax_stage: post_loopclosing (i.e., idealize) for " <<
get_current_tag() << std::endl;
338 if ( loop_success ) {
350 basic::mem_tr <<
"AbrelaxMover::apply fullatom switch" << std::endl;
352 tr <<
"AbrelaxMover: switch to fullatom" << std::endl;
354 tr.Info <<
"prefa_centroid_score:\n ";
356 tr.Info << std::endl;
362 tr.Info <<
"prefa_clean_score3:\n ";
363 clean_score3->show(
tr.Info, pose );
364 tr.Info << std::endl;
368 if (( (option[ OptionKeys::score::weights ]() ==
"score0") ||
369 (option[ OptionKeys::score::weights ]() ==
"score2") ||
370 (option[ OptionKeys::score::weights ]() ==
"score3") ||
371 (option[ OptionKeys::score::weights ]() ==
"score5") ) ) {
372 utility_exit_with_message(
"Cannot proceed - you chose a centroid score function for fullatom mode");
377 last_scorefxn = last_scorefxn_cop->clone();
384 replonly.
apply( pose );
387 if( option[ basic::options::OptionKeys::abinitio::close_loops_by_idealizing ]() ){
393 basic::mem_tr <<
"AbrelaxMover::apply relax" << std::endl;
394 if ( ( loop_success || option[ OptionKeys::abinitio::relax_failures ]() ) &&
relax_protocol()) {
395 tr <<
"AbrelaxMover: relax " << std::endl;
396 if ( !checkpoints.recover_checkpoint( pose,
get_current_tag(),
"relax",
true,
true) ) {
401 checkpoints.debug(
get_current_tag(),
"relax", (*last_scorefxn)( pose ) );
408 if ( ( loop_success || option[ OptionKeys::abinitio::relax_failures ]() ) &&
relax_protocol() && option[ OptionKeys::abinitio::final_clean_relax ]() ) {
409 tr <<
"AbrelaxMover: final relax " << std::endl;
411 if ( !checkpoints.recover_checkpoint( pose,
get_current_tag(),
"finalrelax",
true,
true) ) {
415 checkpoints.debug(
get_current_tag(),
"finalrelax", (*last_scorefxn)( pose ) );
418 if ( option[ OptionKeys::abinitio::clear_pose_cache ]() ) {
419 tr.Debug <<
"\n******************************************************** \n"
420 <<
" CLEAR POSE CACHE \n"
421 <<
"*************************************************************"
429 basic::mem_tr <<
"AbrelaxMover::apply end" << std::endl;
434 return "AbrelaxMover";
438 using namespace basic::options;
445 Size margin = option[ basic::options::OptionKeys::abinitio::optimize_cutpoints_margin ]();
449 if( cloops->size() >= 2 )
450 if( newloop.start() <= ( *cloops )[cloops->size()-1].stop() ) newloop.set_start( ( *cloops )[cloops->size()-1].stop() +2 );
451 newloop.choose_cutpoint( pose );
452 cloops->add_loop( newloop );
454 cloops->auto_choose_cutpoints( pose );
461 idealizer.
fast(
false );
462 idealizer.
apply( pose );
468 if( option[ basic::options::OptionKeys::abinitio::optimize_cutpoints_using_kic ]() ){
475 refine_kic.
apply( pose );