39 #include <basic/options/option.hh>
40 #include <basic/options/keys/remodel.OptionKeys.gen.hh>
41 #include <basic/options/keys/in.OptionKeys.gen.hh>
42 #include <basic/options/keys/enzdes.OptionKeys.gen.hh>
43 #include <basic/options/keys/constraints.OptionKeys.gen.hh>
59 #include <basic/Tracer.hh>
66 #include <utility/vector1.hh>
79 namespace components {
84 static basic::Tracer
TR(
"protocols.forge.components.VarLengthBuild" );
91 recover_original_on_failure_( true ),
92 loop_mover_str_(
"RemodelLoopMover" ),
93 cache_fragments_( true ),
96 use_fullmer_( false ),
97 max_linear_chainbreak_( 0.07 ),
98 fragments_picked_( false ),
99 user_provided_movers_apply_cycle_(3),
100 loop_mover_fold_tree_constant_(false),
101 restart_mode_( false ),
102 ignore_cmdline_enzdes_cstfile_(false)
111 recover_original_on_failure_( true ),
112 loop_mover_str_(
"RemodelLoopMover" ),
113 cache_fragments_( true ),
115 num_fragpick_( 200 ),
116 use_fullmer_( false ),
117 max_linear_chainbreak_( 0.07 ),
118 fragments_picked_( false ),
119 user_provided_movers_apply_cycle_(3),
120 loop_mover_fold_tree_constant_(false),
121 restart_mode_( false ),
122 ignore_cmdline_enzdes_cstfile_(false)
130 remodel_data_( remodel_data ),
131 recover_original_on_failure_( true ),
132 loop_mover_str_(
"RemodelLoopMover" ),
133 cache_fragments_( true ),
135 num_fragpick_( 200 ),
136 use_fullmer_( false ),
137 max_linear_chainbreak_( 0.07 ),
138 fragments_picked_( false ),
139 user_provided_movers_apply_cycle_(3),
140 loop_mover_fold_tree_constant_(false),
141 restart_mode_( false ),
142 ignore_cmdline_enzdes_cstfile_(false)
150 manager_( rval.manager_ ),
151 sfx_( rval.sfx_->
clone() ),
152 recover_original_on_failure_( rval.recover_original_on_failure_ ),
153 loop_mover_str_( rval.loop_mover_str_ ),
154 cache_fragments_( rval.cache_fragments_ ),
155 vall_memory_usage_( rval.vall_memory_usage_ ),
156 num_fragpick_( rval.num_fragpick_ ),
157 use_fullmer_( rval.use_fullmer_ ),
158 original_sequence_( rval.original_sequence_ ),
159 new_secondary_structure_override_( rval.new_secondary_structure_override_ ),
160 new_sequence_override_( rval.new_sequence_override_ ),
161 max_linear_chainbreak_( rval.max_linear_chainbreak_ ),
162 abego_( rval.abego_ ),
164 setup_movers_(rval.setup_movers_),
165 user_provided_movers_(rval.user_provided_movers_),
166 user_provided_movers_apply_cycle_(rval.user_provided_movers_apply_cycle_),
167 loop_mover_fold_tree_constant_(rval.loop_mover_fold_tree_constant_),
168 restart_mode_( rval.restart_mode_ ),
169 ignore_cmdline_enzdes_cstfile_(rval.ignore_cmdline_enzdes_cstfile_)
232 rcg->set_vlb(
this );
234 rcgs_.push_back( rcg );
306 Pose archive_pose = pose;
328 for (Original2Modified::const_iterator it = dummy.begin(),
end=dummy.end(); it !=
end; ++ it){
330 if ( basic::options::option[basic::options::OptionKeys::remodel::repeat_structure].user() ){
332 original2modified[(*it).second] = (*it).second;
335 original2modified[(*it).second] = (*it).second;
343 if (basic::options::option[basic::options::OptionKeys::remodel::repeat_structure].user()) {
354 cached_phi.push_back( pose.
phi( i ) );
355 cached_psi.push_back( pose.
psi( i ) );
356 cached_omega.push_back( pose.
omega( i ));
377 if (basic::options::option[basic::options::OptionKeys::remodel::repeat_structure].user()) {
383 for (
Size i = 1; i<= len_diff; i++){
404 for (
Size i = 1; i<= len_diff; i++){
425 if (cached_phi.size() != 0){
426 pose.
set_phi(i, cached_phi[j]);
427 pose.
set_psi(i, cached_psi[j]);
441 (*mover_it)->apply( pose );
471 if (basic::options::option[basic::options::OptionKeys::remodel::repeat_structure].user()) {
472 if (basic::options::option[basic::options::OptionKeys::remodel::repeat_structure] == 1){
479 using namespace protocols::loops;
484 Pose bufferPose(archive_pose);
502 if (!basic::options::option[basic::options::OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()) {
507 if (basic::options::option[basic::options::OptionKeys::remodel::repeat_structure].user()){
525 return "VarLengthBuild";
589 for ( Original2Modified::const_iterator i = o2m.begin(), ie = o2m.end(); i != ie; ++i ) {
596 for ( Positions::const_iterator i = np.begin(), ie = np.end(); i != ie; ++i ) {
602 Intervals fragment_only_regions;
608 if (basic::options::option[basic::options::OptionKeys::remodel::domainFusion::insert_segment_from_pdb].user()){
618 for ( std::set< Interval >::iterator i = loop_intervals.begin(), ie = loop_intervals.end(); i != ie; ++i ) {
621 if (interval.
left <= insertStartIndex && interval.
right >= insertEndIndex && ((insertEndIndex-insertStartIndex) != 0)){
625 Interval split_interval_left(interval.
left, insertStartIndex);
627 Interval split_interval_right(insertEndIndex, interval.
right);
630 loop_intervals.insert(split_interval_left);
631 loop_intervals.insert(split_interval_right);
634 loop_intervals.erase( i );
641 for ( std::set< Interval >::const_iterator i = loop_intervals.begin(), ie = loop_intervals.end(); i != ie; ++i ) {
656 for ( std::set< Interval >::const_iterator i = loop_intervals.begin(), ie = loop_intervals.end(); i != ie; ++i ) {
661 if (basic::options::option[basic::options::OptionKeys::remodel::repeat_structure].user()) {
668 TR <<
"VLB count_cutpoints " << n_cuts <<
" interval.left " << interval.
left <<
" interval.right " << interval.
right << std::endl;
671 runtime_assert( n_cuts < 2 );
678 loops->add_loop(
Loop( interval.
left, interval.
right, cutpoint, 0.0,
true ) );
680 loops->choose_cutpoints(pose);
683 }
else if ( n_cuts == 0 ) {
685 if (basic::options::option[basic::options::OptionKeys::remodel::repeat_structure].user()) {
686 loops->add_loop(
Loop( interval.
left, interval.
right, 0, 0.0,
true ) );
688 loops->add_loop(
Loop( interval.
left, interval.
right, 0, 0.0,
true ) );
704 TR <<
"total full-mer fragments: " <<
fragfull_->size() << std::endl;
706 TR <<
"total 9-mer fragments: " <<
frag9_->size() << std::endl;
707 TR <<
"total 3-mer fragments: " <<
frag3_->size() << std::endl;
708 TR <<
"total 1-mer fragments: " <<
frag1_->size() << std::endl;
715 FragmentLibraryManager::get_instance()->clear_Vall();
719 FragmentLibraryManager::get_instance()->clear_Vall();
740 cstOP->use_backbone_only_blocks();
742 cstOP->enable_constraint_scoreterms(
sfx_);
745 if (basic::options::option[ basic::options::OptionKeys::constraints::cst_file ].user()){
750 constraint->apply( pose );
765 loop_mover->apply( pose );
771 bool cbreaks_pass =
true;
773 if (basic::options::option[basic::options::OptionKeys::remodel::RemodelLoopMover::bypass_closure].user() ){
778 if ( l->cut() > 0 ) {
780 TR <<
"centroid_build: final chainbreak at " << l->cut() <<
" = " << c <<
" max tolerance " <<
max_linear_chainbreak_ << std::endl;
808 loop_mover->scorefunction( *
sfx_ );
810 if (basic::options::option[basic::options::OptionKeys::remodel::repeat_structure].user()) {
817 loop_mover->add_fragments(
frag9_ );
818 loop_mover->add_fragments(
frag3_ );
819 loop_mover->add_fragments(
frag1_ );
821 loop_mover->false_movemap( false_mm );
837 loop_mover->set_scorefxn(
sfx_ );
838 loop_mover->set_strict_loops(
true );
843 loop_mover->add_fragments(
frag9_ );
844 loop_mover->add_fragments(
frag3_ );
845 loop_mover->add_fragments(
frag1_ );
862 String const & complete_ss,
863 String const & complete_aa,
885 frag9_ =
new ConstantLengthFragSet( 9 );
887 if ( basic::options::option[basic::options::OptionKeys::in::file::frag9].user() ){
888 frag9_->read_fragment_file( basic::options::option[basic::options::OptionKeys::in::file::frag9]());
890 frag9_->add(
pick_fragments( complete_ss, complete_aa, complete_abego, interval, 9, n_frags ) );
895 frag3_ =
new ConstantLengthFragSet( 3 );
898 if ( basic::options::option[basic::options::OptionKeys::in::file::frag3].user() ){
899 tmp_frag3->read_fragment_file( basic::options::option[basic::options::OptionKeys::in::file::frag3]());
900 frag3_->read_fragment_file( basic::options::option[basic::options::OptionKeys::in::file::frag3]());
902 tmp_frag3->add(
pick_fragments( complete_ss, complete_aa, complete_abego, interval, 3, n_frags ) );
903 frag3_->add( *tmp_frag3 );
908 frag1_ =
new ConstantLengthFragSet( 1 );
923 String const & complete_ss,
924 String const & complete_aa,
927 Size const frag_length,
941 for (
Size j = 0, je = interval.
length(); j < je; ++j ) {
942 TR <<
"picking " << n_frags <<
" " << frag_length <<
"-mers for position " << ( interval.
left + j ) << std::endl;
944 String ss_sub = complete_ss.substr( interval.
left + j - 1, frag_length );
945 if ( ss_sub.length() < frag_length ) {
946 ss_sub.append( frag_length - ss_sub.length(),
'D' );
950 if ( !complete_aa.empty() ) {
951 aa_sub = complete_aa.substr( interval.
left + j - 1, frag_length );
952 if ( aa_sub.length() < frag_length ) {
953 aa_sub.append( frag_length - aa_sub.length(),
'.' );
960 if ( complete_abego.size() > 0 ) {
961 runtime_assert( complete_ss.length() == complete_abego.size() );
963 abego_sub.resize( frag_length );
964 for(
Size ii = interval.
left + j; ii <= interval.
left + j + frag_length - 1; ++ii, ++pos ) {
965 if ( ii > complete_abego.size() ) {
966 abego_sub[ pos ] =
"X";
968 abego_sub[ pos ] = complete_abego[ ii ];
975 FrameOP frame =
new Frame( interval.
left + j, frag_length );
977 frame->add_fragment(
pick_fragments( ss_sub, aa_sub, abego_sub, n_frags,
true, IndependentBBTorsionSRFD() ) );
990 frames.push_back( frame );
1002 if (
rcgs_.empty() ) {
1007 (*rcg_it)->set_seqmap( this->
manager().sequence_mapping());
1008 TR <<
"Adding remodel constraints to pose using " << (*rcg_it)->get_name() << std::endl;
1009 (*rcg_it)->add_remodel_constraints_to_pose( pose );
1019 if (
rcgs_.empty() ) {
1024 (*rcg_it)->remove_remodel_constraints_from_pose( pose );