60 #include <basic/Tracer.hh>
62 #include <basic/options/option.hh>
63 #include <utility/exit.hh>
64 #include <numeric/random/random.hh>
70 #include <basic/options/keys/AnchoredDesign.OptionKeys.gen.hh>
71 #include <basic/options/keys/packing.OptionKeys.gen.hh>
72 #include <basic/options/keys/loops.OptionKeys.gen.hh>
73 #include <basic/options/keys/in.OptionKeys.gen.hh>
75 #include <utility/vector1.hh>
82 static basic::Tracer
TR(
"protocols.AnchoredDesign.AnchorMoversData" );
83 static numeric::random::RandomGenerator
RG(10505);
86 namespace anchored_design{
101 utility::pointer::ReferenceCount(),
103 anchor_loop_index_( 0 ),
104 movemap_fa_all_( new core::kinematics::MoveMap() ),
105 movemap_cen_all_( new core::kinematics::MoveMap() ),
112 fullatom_scorefunction_( 0 ),
113 centroid_scorefunction_( 0 ),
114 centroid_scorefunction_min_( 0 ),
118 unbound_mode_( false ),
119 anchor_via_constraints_( false ),
122 allow_anchor_repack_( false ),
128 anchor_noise_constraints_mode_( false ),
129 super_secret_fixed_interface_mode_( false )
136 bool const options) :
137 utility::pointer::ReferenceCount(),
139 anchor_loop_index_( 0 ),
140 movemap_fa_all_( new core::kinematics::MoveMap() ),
141 movemap_cen_all_( new core::kinematics::MoveMap() ),
148 fullatom_scorefunction_( 0 ),
149 centroid_scorefunction_( 0 ),
150 centroid_scorefunction_min_( 0 ),
154 unbound_mode_( false ),
155 anchor_via_constraints_( false ),
158 allow_anchor_repack_( false ),
164 anchor_noise_constraints_mode_( false ),
165 super_secret_fixed_interface_mode_( false )
182 utility::pointer::ReferenceCount(),
184 anchor_loop_index_( 0 ),
185 movemap_fa_all_( new core::kinematics::MoveMap() ),
186 movemap_cen_all_( new core::kinematics::MoveMap() ),
193 fullatom_scorefunction_( 0 ),
194 centroid_scorefunction_( 0 ),
195 centroid_scorefunction_min_( 0 ),
199 unbound_mode_( false ),
200 anchor_via_constraints_( false ),
203 allow_anchor_repack_( false ),
209 anchor_noise_constraints_mode_( false ),
210 super_secret_fixed_interface_mode_( false )
242 utility::pointer::ReferenceCount(rhs),
253 if (
this == &rhs)
return *
this;
295 TR <<
"checking/(re)setting loop cutpoints; loops become:" << std::endl;
299 core::Size const loopstart(loop(i).
start()), loopend(loop(i).
stop()), loopcut(loop(i).cut());
300 if(reset_always || (loopcut < loopstart) || (loopcut > loopend) || ((anchor_->start() <= loopcut) && (anchor_->end() >= loopcut))){
301 core::Size cut(pick_new_cutpoint(loopstart, loopend));
302 loops_and_fa_mms_[ i ].key1().set_cut(cut);
303 loops_and_cen_mms_[ i ].key1().set_cut(cut);
306 TR << loop(i) << std::endl;
315 newcutpoint = (loopstart) +
int(
RG.uniform()*(loopend-loopstart+1) );
316 }
while( ((anchor_->start()) <= newcutpoint) && ((anchor_->end()) >= newcutpoint) );
329 { fullatom_scorefunction_ = in; }
333 { centroid_scorefunction_ = in; }
343 input_loops_into_tuples(loops);
344 locate_anchor_loop();
354 {
return loops_and_fa_mms_[ anchor_loop_index_ ].key1(); }
364 {
return loops_and_fa_mms_[ i ].key1(); }
368 {
return loops_and_fa_mms_[ i ].key2(); }
372 {
return loops_and_fa_mms_[ i ].key3(); }
376 {
return loops_and_cen_mms_[ i ].key2(); }
380 {
return loops_and_cen_mms_[ i ].key3(); }
400 {
return task_factory_; }
403 {
return late_factory_; }
406 {
return fullatom_scorefunction_; }
409 {
return centroid_scorefunction_; }
412 {
return centroid_scorefunction_min_; }
415 {
return task_factory_->create_task_and_apply_taskoperations( pose ); }
422 loops_and_fa_mms_.clear();
423 loops_and_cen_mms_.clear();
444 core::Size const anchorstart(anchor_->start()), anchorend(anchor_->end());
447 if ( (loopstart < anchorstart) && (loopend > anchorend) ){
448 TR <<
"anchor start/end " << anchorstart <<
"/" << anchorend
449 <<
" fits within loop start/end " << loopstart <<
"/" << loopend << std::endl;
450 anchor_loop_index_ = i;
455 if(get_super_secret_fixed_interface_mode()) {
456 anchor_loop_index_ = 0;
457 TR <<
"anchor start/end " << anchorstart <<
"/" << anchorend
458 <<
" not within a loop; appropriate for super_secret_fixed_interface_mode" << std::endl;
463 Error() <<
"Anchor does not reside completely within a loop. Anchor start and end: " << anchorstart
464 <<
" " << anchorend << std::endl;
471 movemap_fa_all_->clear();
472 movemap_cen_all_->clear();
478 movemap_fa(i)->clear();
479 movemap_fa_omegafixed(i)->clear();
480 movemap_cen(i)->clear();
481 movemap_cen_omegafixed(i)->clear();
484 for (
core::Size j = loopstart; j <= loopend; ++j){
485 set_movemap( movemap_fa( i ), j );
486 set_movemap( movemap_fa_omegafixed( i ), j,
true );
487 set_movemap( movemap_fa_all_, j );
489 set_movemap( movemap_cen( i ), j );
490 set_movemap( movemap_cen_omegafixed( i ), j,
true );
491 set_movemap( movemap_cen_all_, j );
496 if( !get_super_secret_fixed_interface_mode() ) {
497 fix_anchor( movemap_fa( anchor_loop_index_ ),
false );
498 fix_anchor( movemap_fa_omegafixed( anchor_loop_index_ ),
false );
499 fix_anchor( movemap_fa_all_,
false );
501 fix_anchor( movemap_cen( anchor_loop_index_ ),
true );
502 fix_anchor( movemap_cen_omegafixed( anchor_loop_index_ ),
true );
503 fix_anchor( movemap_cen_all_,
true );
512 if(seqpos == akash_dyepos_)
return;
513 using namespace core::id;
514 movemap->set_bb(seqpos,
true);
516 movemap->set_chi(seqpos,
true);
523 if( unbound_mode_ || get_super_secret_fixed_interface_mode() )
return;
524 if( anchor_via_constraints_ && !centroid ) {
525 movemap->set_jump(1,
true);
530 for (
core::Size i = anchor_->start(); i <= anchor_->end(); ++i){
531 movemap->set_bb(i,
false);
532 movemap->set_chi(i,
false);
535 using namespace core::id;
541 movemap->set_jump(
false);
546 set_unset_scorefunctions();
547 set_unset_packertask_factory();
552 using namespace core::scoring;
557 centroid_scorefunction_->set_weight(
cbeta, 1.0 );
558 centroid_scorefunction_->set_weight(
vdw, VDW_weight_ );
559 centroid_scorefunction_->set_weight(
pair, 1.0 );
560 centroid_scorefunction_->set_weight(
cenpack, 1.0 );
561 centroid_scorefunction_->set_weight(
rama, 1.0 );
562 centroid_scorefunction_->set_weight(
chainbreak, 2.0 );
563 centroid_scorefunction_->set_weight(
hbond_lr_bb, 1.0 );
564 centroid_scorefunction_->set_weight(
hbond_sr_bb, 1.0 );
567 TR <<
"Using default centroid scorefunction\n" << *centroid_scorefunction_ << std::flush;
570 centroid_scorefunction_min_ = centroid_scorefunction_->clone();
571 centroid_scorefunction_->set_weight(
env, 0. );
572 centroid_scorefunction_->set_weight(
cbeta, 0. );
573 centroid_scorefunction_->set_weight(
pair, 0. );
574 centroid_scorefunction_->set_weight(
cenpack, 0. );
578 fullatom_scorefunction_->set_weight(
chainbreak, chainbreak_weight_ );
580 TR <<
"Using default fullatom scorefunction (STANDARD_WTS, SCORE12_PATCH plus chainbreak @ a lot)\n"
581 << *fullatom_scorefunction_ << std::flush;
589 using namespace core::pack::task;
593 std::set< core::Size > loop_posns;
596 for (
core::Size j = loopstart; j <= loopend; ++j){
597 loop_posns.insert(j);
606 Warning() <<
"In AnchoredDesign, calculator " << interface_calc_ <<
" already exists. "
607 <<
"Given the two-chain restriction, this is hopefully correct for your purposes" << std::endl;
613 Warning() <<
"In AnchoredDesign, calculator " << neighborhood_calc_ <<
" already exists. If you have multiple instances of AnchoredDesign with different loops coexisting in the same program, this is going to cause problems, because you will have the wrong loop definitions for determining what residues to pack" << std::endl;
620 calcs_and_calcns.push_back(std::make_pair(interface_calc_,
"interface_residues"));
621 calcs_and_calcns.push_back(std::make_pair(neighborhood_calc_,
"neighbors"));
631 if (!allow_anchor_repack_ && !get_super_secret_fixed_interface_mode()){
632 TR <<
"autogenerated TaskFactory will prevent repacking for anchor" << std::endl;
633 for(
core::Size i(anchor_->start()); i<= anchor_->end(); ++i){
634 prop->include_residue(i);
643 rrop1->filename( resfile_1_ );
644 task_factory_->push_back( rrop1 );
646 task_factory_->push_back( initop );
647 task_factory_->push_back( rbcop );
648 if(!allow_anchor_repack_) task_factory_->push_back( prop );
649 TR <<
"Using default TaskFactory. Inits from command line and second resfile, then restricts "
650 <<
"to the loop/interface area" << std::endl;
656 rrop2->filename( resfile_2_ );
657 late_factory_->push_back( rrop2 );
659 late_factory_->push_back( initop );
660 late_factory_->push_back( rbcop );
661 if(!allow_anchor_repack_) late_factory_->push_back( prop );
663 TR <<
"Using default late TaskFactory. Inits from command line and second resfile, then restricts "
664 <<
"to the loop/interface area" << std::endl;
667 late_factory_ = task_factory_;
668 TR <<
"Not using separate late TaskFactory." << std::endl;
684 std::set< core::Size > loop_posns;
687 for (
core::Size j = loopstart; j <= loopend - frags_length+1; ++j){
688 if( !( (j >anchor_->start() - frags_length) && (j <= anchor_->
end()) ) ){
689 TR <<
"adding frame, start at " << j <<
" go for " << frags_length <<
" to " << j+frags_length << std::endl;
692 frame->add_fragment( list );
693 fragset->add( frame );
698 TR <<
"recovering memory?" << std::endl;
715 std::set< core::Size > loop_posns;
718 for (
core::Size j = loopstart; j <= loopend - frags_length+1; ++j){
719 if( !( (j >anchor_->start() - frags_length) && (j <= anchor_->
end()) ) ){
720 std::string const seqsubstr(seq, j-1, frags_length);
721 TR <<
"adding frame, start at " << j <<
" go for " << frags_length <<
" to " << j+frags_length <<
" seq " << seqsubstr << std::endl;
726 frame->add_fragment( list );
727 fragset->add( frame );
732 TR <<
"recovering memory?" << std::endl;
746 if( frags_file && no_frags_ ){
747 utility_exit_with_message(
"you've specified a fragments file and requested no_frags - please choose only one");
748 }
else if ( frags_file ){
749 TR <<
"reading from fragments file " << frag3_ << std::endl;
751 fragset3mer->read_fragment_file( frag3_ );
752 set_frags( fragset3mer );
753 }
else if ( !no_frags_ ){
755 if(get_task_factory()->create_task_and_apply_taskoperations(pose)->design_any()) {
756 TR <<
"creating sequence-generic loop fragments (LLLLL...)" << std::endl;
757 autogenerate_design_frags();
759 TR <<
"creating constant-sequence fragments for loops" << std::endl;
760 autogenerate_constseq_frags(pose.
sequence());
762 }
else {
TR <<
"using no fragments" << std::endl; }
824 TR <<
"initializing from options system" << std::endl;
826 using namespace basic::options;
827 using namespace basic::options::OptionKeys::AnchoredDesign;
830 if(option[akash::dyepos].user()) {
831 akash_dyepos_ = option[akash::dyepos].value();
837 unbound_mode_ = option[ unbound_mode ].value();
840 anchor_via_constraints_ = option[ testing::anchor_via_constraints ].value();
843 VDW_weight_ = option[testing::VDW_weight].value();
846 chainbreak_weight_ = option[chainbreak_weight].value();
849 allow_anchor_repack_ = option[allow_anchor_repack].value();
852 if(option[OptionKeys::packing::resfile].user()) {
853 resfile_1_ = option[OptionKeys::packing::resfile].value().at(1);
859 if(option[OptionKeys::packing::resfile].user() && (option[ OptionKeys::packing::resfile ].value().
size() > 1)) {
860 resfile_2_ = option[OptionKeys::packing::resfile].value().at(2);
866 if(option[OptionKeys::loops::loop_file].user()) {
867 loop_file_ = option[OptionKeys::loops::loop_file].value().at(1);
871 if(option[OptionKeys::in::file::frag3].user()) {
872 frag3_ = option[OptionKeys::in::file::frag3].value();
876 no_frags_ = option[ no_frags ].value();
879 anchor_noise_constraints_mode_ = option[ testing::anchor_noise_constraints_mode ].value();
881 super_secret_fixed_interface_mode_ = option[ testing::super_secret_fixed_interface_mode ].value();
895 if(anchor_start() != anchor_end())
896 utility_exit_with_message(
"You can only use one-residue anchors with anchor_noise_constraints_mode");
907 utility_exit_with_message(
"cannot use anchor_noise_constraints_mode with more than two chains");
908 core::Size const oppchain( anchor > chain1end ? 1 : 2);
911 typedef std::pair< core::Real, core::id::AtomID> dist_resid;
912 std::set< dist_resid > distances;
918 distances.insert(std::make_pair( anchor_xyz.distance(pose.
xyz(target_atomID)), target_atomID) );
924 std::set< dist_resid >::const_iterator opp_CA(distances.begin());
925 for(
core::Size i(1); i<=this_many_constraints; ++i, ++opp_CA){
926 using namespace core::scoring::constraints;
930 TR <<
"anchor_noise_constraints constraint, opp_CA, center, sd: " << opp_CA->second <<
" " << opp_CA->first <<
" " << sd << std::endl;
945 movemap_fa_all_->set_jump(1,
true);
946 movemap_cen_all_->set_jump(1,
true);
949 movemap_fa(i)->set_jump(1,
true);
950 movemap_fa_omegafixed(i)->set_jump(1,
true);
951 movemap_cen(i)->set_jump(1,
true);
952 movemap_cen_omegafixed(i)->set_jump(1,
true);