46 #include <basic/Tracer.hh>
53 #include <basic/options/option.hh>
54 #include <basic/options/keys/remodel.OptionKeys.gen.hh>
55 #include <basic/options/keys/constraints.OptionKeys.gen.hh>
69 #include <numeric/random/random.hh>
70 #include <numeric/random/random_permutation.hh>
73 #include <boost/format.hpp>
82 #include <utility/vector0.hh>
83 #include <utility/vector1.hh>
84 #include <utility/tag/Tag.hh>
85 #include <boost/lexical_cast.hpp>
89 #include <utility/string_util.hh>
99 static basic::Tracer
TR(
"protocols.forge.remodel.RemodelLoopMover" );
102 static numeric::random::RandomGenerator
RG( 9788221 );
118 return "RemodelLoop";
124 Super(
"RemodelLoop" ),
126 max_linear_chainbreak_( 0.07 ),
127 randomize_loops_( true ),
128 allowed_closure_attempts_( 1 ),
129 loophash_cycles_( 8 ),
130 simultaneous_cycles_( 2 ),
131 independent_cycles_( 8 ),
132 user_provided_movers_apply_cycle_(3),
133 boost_closure_cycles_( 30 ),
135 keep_input_foldtree_( false )
143 Super(
"RemodelLoop" ),
146 max_linear_chainbreak_( 0.07 ),
147 randomize_loops_( true ),
148 allowed_closure_attempts_( 1 ),
149 loophash_cycles_( 8 ),
150 simultaneous_cycles_( 2 ),
151 independent_cycles_( 8 ),
152 user_provided_movers_apply_cycle_(3),
153 boost_closure_cycles_( 30 ),
155 keep_input_foldtree_( false )
166 false_movemap_( rval.false_movemap_ ),
167 loops_( rval.loops_ ),
168 max_linear_chainbreak_( rval.max_linear_chainbreak_ ),
169 randomize_loops_( rval.randomize_loops_ ),
170 allowed_closure_attempts_( rval.allowed_closure_attempts_ ),
171 loophash_cycles_( rval.loophash_cycles_ ),
172 simultaneous_cycles_( rval.simultaneous_cycles_ ),
173 independent_cycles_( rval.independent_cycles_ ),
174 user_provided_movers_(rval.user_provided_movers_),
175 user_provided_movers_apply_cycle_(rval.user_provided_movers_apply_cycle_),
176 boost_closure_cycles_( rval.boost_closure_cycles_ ),
177 temperature_( rval.temperature_ ),
178 fragsets_( rval.fragsets_ ),
179 keep_input_foldtree_(rval.keep_input_foldtree_)
201 using namespace basic::options;
202 using namespace OptionKeys::remodel;
203 if( option[ OptionKeys::remodel::RemodelLoopMover::max_linear_chainbreak ].user() )
max_linear_chainbreak_ = option[ OptionKeys::remodel::RemodelLoopMover::max_linear_chainbreak ].value();
204 if( option[ OptionKeys::remodel::RemodelLoopMover::randomize_loops ].user() )
randomize_loops_ = option[ OptionKeys::remodel::RemodelLoopMover::randomize_loops ].value();
205 if( option[ OptionKeys::remodel::RemodelLoopMover::allowed_closure_attempts ].user() )
allowed_closure_attempts_ = option[ OptionKeys::remodel::RemodelLoopMover::allowed_closure_attempts ].value();
206 if( option[ OptionKeys::remodel::RemodelLoopMover::loophash_cycles ].user() )
loophash_cycles_ = option[ OptionKeys::remodel::RemodelLoopMover::loophash_cycles ].value();
207 if( option[ OptionKeys::remodel::RemodelLoopMover::simultaneous_cycles ].user() )
simultaneous_cycles_ = option[ OptionKeys::remodel::RemodelLoopMover::simultaneous_cycles ].value();
208 if( option[ OptionKeys::remodel::RemodelLoopMover::independent_cycles ].user() )
independent_cycles_ = option[ OptionKeys::remodel::RemodelLoopMover::independent_cycles ].value();
209 if( option[ OptionKeys::remodel::RemodelLoopMover::boost_closure_cycles ].user() )
boost_closure_cycles_ = option[ OptionKeys::remodel::RemodelLoopMover::boost_closure_cycles ].value();
210 if( option[ OptionKeys::remodel::RemodelLoopMover::temperature ].user() )
temperature_ = option[ OptionKeys::remodel::RemodelLoopMover::temperature ].value();
219 using namespace basic::options;
220 using namespace basic::options::OptionKeys;
221 option.add_relevant( OptionKeys::remodel::RemodelLoopMover::max_linear_chainbreak );
222 option.add_relevant( OptionKeys::remodel::RemodelLoopMover::randomize_loops );
223 option.add_relevant( OptionKeys::remodel::RemodelLoopMover::allowed_closure_attempts );
224 option.add_relevant( OptionKeys::remodel::RemodelLoopMover::loophash_cycles );
225 option.add_relevant( OptionKeys::remodel::RemodelLoopMover::simultaneous_cycles );
226 option.add_relevant( OptionKeys::remodel::RemodelLoopMover::independent_cycles );
227 option.add_relevant( OptionKeys::remodel::RemodelLoopMover::boost_closure_cycles );
228 option.add_relevant( OptionKeys::remodel::RemodelLoopMover::temperature );
253 if ( fragset->size() > 0 ) {
266 using namespace core::pose;
268 using namespace basic::options;
275 if (option[ OptionKeys::remodel::repeat_structure].user()){
279 while ( tail_count ){
294 repeat_pose=non_terminal_pose;
302 Size repeatFactor = option[ OptionKeys::remodel::repeat_structure];
305 while ( repeatFactor !=1){
330 repeat_pose.
set_phi(junction-1, jxnl_phi);
331 repeat_pose.
set_psi(junction-1, jxnl_psi);
332 repeat_pose.
set_omega(junction-1, jxnl_omega);
333 repeat_pose.
set_phi(junction, jxn_phi);
334 repeat_pose.
set_psi(junction, jxn_psi);
335 repeat_pose.
set_omega(junction, jxn_omega);
336 repeat_pose.
set_phi(junction+1, jxnh_phi);
337 repeat_pose.
set_psi(junction+1, jxnh_psi);
338 repeat_pose.
set_omega(junction+1,jxnh_omega);
351 using namespace protocols::loops;
352 using namespace core::kinematics;
354 Size repeat_number = basic::options::option[ OptionKeys::remodel::repeat_structure];
355 Size segment_length = (repeat_pose.
n_residue())/repeat_number;
364 std::set< Size > lower_termini;
365 std::set< Size > upper_termini;
373 if (loop.
start() == 1 && loop.
stop() == segment_length){
377 repeat_loops->push_back(loop);
381 for (
Size rep = 0; rep < repeat_number; rep++){
384 if ( lower_termini.find( loop.
start() ) == lower_termini.end() && upper_termini.find( loop.
stop() ) == upper_termini.end()){
385 Size tempStart = loop.
start()+(segment_length*rep);
386 Size tempStop = loop.
stop()+(segment_length*rep);
387 Size tempCut = loop.
cut()+(segment_length*rep);
390 if ( tempCut > tempStop ){
394 LoopOP newLoop =
new Loop( tempStart, tempStop , tempCut);
396 repeat_loops->push_back(*newLoop);
400 repeat_loops->push_back(*newLoop);
405 if (!repeat_loops->empty()){
417 for (
Loops::iterator l = repeat_loops->v_begin(), le = repeat_loops->v_end(); l != le; ++l ) {
427 if (option[OptionKeys::remodel::no_jumps].user()){
454 TR <<
"pose FT: " << pose.
fold_tree() << std::endl;
455 TR <<
"rpps FT: " << repeat_pose.
fold_tree() << std::endl;
456 TR <<
"set ROT-TRANS from " << j <<
" to " << i << std::endl;
461 Jump tempJump = repeat_pose.
jump(i);
505 using namespace core::pose;
507 using namespace basic::options;
513 if (option[ OptionKeys::remodel::repeat_structure].user()){
514 repeat_pose=non_terminal_pose;
525 Size repeatFactor = option[ OptionKeys::remodel::repeat_structure];
527 while ( repeatFactor !=1){
551 using namespace protocols::loops;
552 using namespace core::kinematics;
554 Size repeat_number = basic::options::option[ OptionKeys::remodel::repeat_structure];
555 Size segment_length = (repeat_pose.
n_residue())/repeat_number;
563 std::set< Size > lower_termini;
564 std::set< Size > upper_termini;
572 if (loop.
start() == 1 && loop.
stop() == segment_length){
576 repeat_loops->push_back(loop);
580 for (
Size rep = 0; rep < repeat_number; rep++){
583 if ( lower_termini.find( loop.
start() ) == lower_termini.end() && upper_termini.find( loop.
stop() ) == upper_termini.end()){
584 Size tempStart = loop.
start()+(segment_length*rep);
585 Size tempStop = loop.
stop()+(segment_length*rep);
586 Size tempCut = loop.
cut()+(segment_length*rep);
589 if ( tempCut > tempStop ){
593 LoopOP newLoop =
new Loop( tempStart, tempStop , tempCut);
595 repeat_loops->push_back(*newLoop);
599 repeat_loops->push_back(*newLoop);
623 if (!repeat_loops->empty()){
634 for (
Loops::iterator l = repeat_loops->v_begin(), le = repeat_loops->v_end(); l != le; ++l ) {
646 for (
Size rep = 1; rep < repeat_number; rep++){
651 Jump tempJump = repeat_pose.
jump(i+(jump_offset*rep));
681 using namespace protocols::loops;
682 using namespace core::kinematics;
686 Size segment_length = (repeat_pose.
n_residue())/repeat_number;
702 linkPositions.push_back(i);
705 for (
Size i = 1; i<= linkPositions.size(); i++){
707 Size res = linkPositions[i];
712 if (res <= segment_length ){
715 loop_phi = repeat_pose.
phi(segment_length+1);
716 loop_psi = repeat_pose.
psi(segment_length+1);
717 loop_omega = repeat_pose.
omega(segment_length+1);
718 repeat_pose.
set_phi( 1, loop_phi);
719 repeat_pose.
set_psi( 1, loop_psi);
722 loop_phi = repeat_pose.
phi(res);
723 loop_psi = repeat_pose.
psi(res);
724 loop_omega = repeat_pose.
omega(res);
727 for (
Size rep = 1; rep < repeat_number; rep++){
728 repeat_pose.
set_phi(res+( segment_length*rep), loop_phi );
729 repeat_pose.
set_psi(res+( segment_length*rep), loop_psi );
730 repeat_pose.
set_omega( res+(segment_length*rep),loop_omega );
733 else if (res > segment_length ){
737 repeat_pose.
set_phi(res-segment_length, repeat_pose.
phi(res));
738 repeat_pose.
set_psi(res-segment_length, repeat_pose.
psi(res));
739 repeat_pose.
set_omega(res-segment_length, repeat_pose.
omega(res));
742 loop_phi = repeat_pose.
phi(res-segment_length);
743 loop_psi = repeat_pose.
psi(res-segment_length);
744 loop_omega = repeat_pose.
omega(res-segment_length);
745 for (
Size rep = 1; rep < repeat_number; rep++){
746 if (res+( segment_length*rep)<= repeat_pose.
total_residue()){
747 repeat_pose.
set_phi(res+( segment_length*rep), loop_phi );
748 repeat_pose.
set_psi(res+( segment_length*rep), loop_psi );
749 repeat_pose.
set_omega( res+(segment_length*rep),loop_omega );
755 TR <<
"ERROR in collecting positions: res: " << res << std::endl;
769 using namespace protocols::loops;
770 using namespace core::kinematics;
774 Size segment_length = (repeat_pose.
n_residue())/repeat_number;
781 bool build_across_jxn =
false;
782 Size residues_beyond_jxn = 0;
785 std::set< Size > lower_termini;
786 std::set< Size > upper_termini;
794 if (loop.
start() == 1 && loop.
stop() == segment_length){
800 if (loop.
start() <= segment_length && loop.
stop() > segment_length){
802 build_across_jxn =
true;
803 residues_beyond_jxn = loop.
stop() - segment_length;
807 repeat_loops->push_back(loop);
811 for (
Size rep = 0; rep < repeat_number; rep++){
814 if ( lower_termini.find( loop.
start() ) == lower_termini.end() && upper_termini.find( loop.
stop() ) == upper_termini.end()){
815 Size tempStart = loop.
start()+(segment_length*rep);
816 Size tempStop = loop.
stop()+(segment_length*rep);
817 Size tempCut = loop.
cut()+(segment_length*rep);
820 if ( tempCut > tempStop ){
824 LoopOP newLoop =
new Loop( tempStart, tempStop , tempCut);
826 repeat_loops->push_back(*newLoop);
830 repeat_loops->push_back(*newLoop);
854 if (!repeat_loops->empty() && !basic::options::option[basic::options::OptionKeys::remodel::no_jumps].user()){
862 for (
Loops::iterator l = repeat_loops->v_begin(), le = repeat_loops->v_end(); l != le; ++l ) {
894 if (build_across_jxn){
895 while (residues_beyond_jxn){
896 pose.
set_phi(residues_beyond_jxn, pose.
phi(residues_beyond_jxn+segment_length));
897 pose.
set_psi(residues_beyond_jxn, pose.
psi(residues_beyond_jxn+segment_length));
898 pose.
set_omega(residues_beyond_jxn, pose.
omega(residues_beyond_jxn+segment_length));
899 residues_beyond_jxn--;
904 for (
Size rep = 0; rep < repeat_number; rep++){
905 for (
Size res = 1; res <= segment_length; res++){
910 loop_phi = pose.
phi(segment_length+1);
911 loop_psi = pose.
psi(segment_length+1);
913 loop_phi = pose.
phi(res);
914 loop_psi = pose.
psi(res);
917 repeat_pose.
set_phi(res+( segment_length*rep), loop_phi );
918 repeat_pose.
set_psi(res+( segment_length*rep), loop_psi );
919 repeat_pose.
set_omega( res+(segment_length*rep), pose.
omega(res) );
942 using namespace basic::options;
943 using namespace core::scoring::constraints;
958 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
967 if (basic::options::option[ OptionKeys::constraints::cst_file ].user()){
1014 std::multimap< Real, PoseOP > accumulator;
1017 Real const final_standard_cbreak_weight = 5.0;
1021 Real const final_boost_closure_cbreak_weight = 5.0;
1022 Real const boost_closure_cbreak_increment = ( final_boost_closure_cbreak_weight - final_standard_cbreak_weight ) /
boost_closure_cycles();
1024 assert( final_boost_closure_cbreak_weight >= final_standard_cbreak_weight );
1032 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1041 TR <<
"Randomize stage was skipped " << std::endl;
1047 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1059 TR <<
"* closure_attempt " << attempt << std::endl;
1063 if (basic::options::option[ OptionKeys::remodel::RemodelLoopMover::use_loop_hash].user()) {
1086 pose_prime->fold_tree( sealed_ft );
1089 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1099 (*sfxOP)( *pose_prime );
1100 accumulator.insert( std::make_pair( pose_prime->energies().total_energy(), pose_prime ) );
1106 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1120 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1141 if ( !accumulator.empty() ) {
1142 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1143 pose = *( accumulator.begin()->second );
1148 pose = *( accumulator.begin()->second );
1174 if (basic::options::option[ OptionKeys::remodel::RemodelLoopMover::bypass_closure].user() &&
1175 basic::options::option[ OptionKeys::remodel::lh_filter_string].user()){
1178 TR <<
"fail in loop building: EXIT " << std::endl;
1183 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1194 return "RemodelLoopMover";
1202 TR <<
"** randomize_stage" << std::endl;
1231 for ( FragmentMoverOPs::iterator i = frag_movers.begin(), ie = frag_movers.end(); i != ie; ++i ) {
1232 for (
Size j = 0; j < n_moveable; ++j ) {
1233 (*i)->apply( pose );
1251 bool const only_broken_loops
1255 using namespace basic::options;
1260 if ( only_broken_loops ) {
1279 Size smallestmer_size = ( *
fragsets_.begin() )->max_frag_length();
1280 for ( FragSetOPs::const_iterator f =
fragsets_.begin(), fe =
fragsets_.end(); f != fe; ++f ) {
1281 smallestmer_size = std::min( smallestmer_size, (*f)->max_frag_length() );
1287 for ( FragmentMoverOPs::iterator i = frag_movers.begin(), ie = frag_movers.end(); i != ie; ++i ) {
1288 (*i)->apply( pose );
1289 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1308 using namespace core;
1309 Real const clash_dist2_cut( clash_dist_cut * clash_dist_cut );
1310 for(
Size iatid = 1; iatid <= check_atids.size(); ++iatid ){
1311 Vector const at1_xyz( pose.
xyz( check_atids[ iatid ] ) );
1318 bool skip_at2(
false );
1319 for(
Size jatid = 1; jatid <= check_atids.size(); ++jatid ){
1320 if( atid2 == check_atids[ jatid ] ){ skip_at2 =
true;
break; }
1322 if( skip_at2 )
continue;
1323 Real const dist2( at1_xyz.distance_squared( pose.
xyz( atid2 ) ) );
1324 if( dist2 < clash_dist2_cut ){
1342 Real const cbreak_increment
1347 using namespace basic::options;
1348 using namespace OptionKeys::remodel;
1349 using namespace protocols::loophash;
1350 using namespace numeric::geometry::hashing;
1354 TR <<
"** LoopHash_stage" << std::endl;
1356 Pose const constantPose(pose);
1365 bool skip_loop =
false;
1366 if ( l->is_terminal( pose ) || l->start() == 1 ) {
1370 loops_to_model->add_loop( *l );
1374 TR <<
" n_loops = " << loops_to_model->size() << std::endl;
1378 if (basic::options::option[ OptionKeys::remodel::lh_filter_string].user()){
1379 runtime_assert(filter_target.size() == loops_to_model->size());
1382 if ( loops_to_model->size() == 0 ) {
1390 for (
Loops::iterator l = loops_to_model->v_begin(), le = loops_to_model->v_end(); l != le; ++l ) {
1393 loopsizes.push_back(db_to_use);
1407 Size loop_number = 1;
1409 for (
Loops::iterator l = loops_to_model->v_begin(), le = loops_to_model->v_end(); l != le; ++l, loop_number++ ) {
1429 if (option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
1444 assert( !frag_movers.empty() );
1458 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1492 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1502 Size loopsize = loopsizes[loop_number];
1504 loop_hash_library->load_mergeddb();
1507 std::vector < BackboneSegment > bs_vec_;
1509 const BackboneDB & bbdb_ = loop_hash_library->backbone_database();
1511 Real6 loop_transform;
1517 using namespace core::chemical;
1527 residue_indices.push_back(i);
1536 pose_for_rt->fold_tree(f);
1540 TR <<
"loophashing from " << loop.
start()-1 <<
" to " << loop.
stop()+1 <<
" using " << loop.
stop()+1 - (loop.
start()-1) <<
" residue loops." << std::endl;
1556 LoopHashMap &hashmap = loop_hash_library->gethash(loopsize);
1558 Size lh_ex_limit = basic::options::option[ OptionKeys::remodel::lh_ex_limit];
1559 std::vector < core::Size > leap_index_list;
1562 for (
Size radius = 0; radius <= lh_ex_limit ; radius++ ){
1563 hashmap.radial_lookup( radius, loop_transform, leap_index_list );
1564 TR << radius <<
"... " << leap_index_list.size() << std::endl;
1565 if (leap_index_list.size() < 1000){
1576 TR <<
"collected " << leap_index_list.size() <<
" fragments." << std::endl;
1577 Size lh_frag_count = leap_index_list.size();
1578 if (leap_index_list.size() == 0){
1582 for( std::vector < core::Size >::const_iterator itx = leap_index_list.begin(); itx != leap_index_list.end(); ++itx ){
1584 LeapIndex cp = hashmap.get_peptide( bb_index );
1586 bs_vec_.push_back( backbone_ );
1589 if( bs_vec_.size() == 0 ) {
1590 TR <<
"No frags matched" << std::endl;
1597 for (
Size outer = 1; outer <= max_outer_cycles; ++outer ) {
1607 if (option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
1611 if (option[OptionKeys::remodel::RemodelLoopMover::cyclic_peptide].user()){
1618 if (option[OptionKeys::remodel::lh_cbreak_selection].user()){
1625 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1627 if (basic::options::option[ OptionKeys::remodel::repeat_structure] == 1){
1632 for (
Size res = 1; res<=copy_size; res++){
1647 for ( std::vector< BackboneSegment >::iterator i = bs_vec_.begin(), ie = bs_vec_.end(); i != ie; ++i) {
1653 std::vector<core::Real>
phi = (*i).phi();
1654 std::vector<core::Real>
psi = (*i).psi();
1655 std::vector<core::Real>
omega = (*i).omega();
1656 Size seg_length = (*i).length();
1661 Size idxresStart = 0;
1662 Size idxresStop = seg_length-1;
1668 for (
Size idx = idxresStart; idx <= idxresStop; idx++){
1671 runtime_assert(alphabet.length() == target.length());
1672 if ( alphabet.compare( target ) != 0 ){
1702 for (
Size i = 0; i < seg_length; i++){
1722 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1729 for (
Size i = 0; i < seg_length; i++){
1741 if (!option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
1749 for (
Size i = 0; i < seg_length; i++){
1758 if (!option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
1765 TR <<
"Sec struc filtered fragment count = " << lh_frag_count << std::endl;
1769 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1771 if (basic::options::option[ OptionKeys::remodel::repeat_structure] == 1){
1776 for (
Size res = 1; res<=copy_size; res++){
1786 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1808 Real const cbreak_increment
1813 using namespace basic::options;
1814 using namespace OptionKeys::remodel;
1818 using numeric::random::random_permutation;
1820 TR <<
"** simultaneous_stage" << std::endl;
1840 TR <<
" n_loops = " << loops_to_model->size() << std::endl;
1842 if ( loops_to_model->size() == 0 ) {
1862 assert( !frag_movers.empty() );
1881 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1900 Size const max_inner_cycles = std::max( 50 * loops_to_model->size(), 10 * n_moveable );
1907 for (
Size outer = 1; outer <= max_outer_cycles; ++outer ) {
1915 if (option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
1918 if (option[OptionKeys::remodel::RemodelLoopMover::cyclic_peptide].user()){
1927 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1929 if (basic::options::option[ OptionKeys::remodel::repeat_structure] == 1){
1935 for (
Size res = 1; res<=copy_size; res++){
1944 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1948 for (
Size inner = 1; inner <= max_inner_cycles; ++inner ) {
1952 random_permutation( frag_movers.begin(), frag_movers.end(),
RG );
1953 for ( FragmentMoverOPs::iterator i = frag_movers.begin(), ie = frag_movers.end(); i != ie; ++i ) {
1954 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1959 (*i)->apply( pose );
1965 random_permutation( loops_to_model->v_begin(), loops_to_model->v_end(),
RG );
1966 for (
Loops::const_iterator l = loops_to_model->begin(), le = loops_to_model->end(); l != le; ++l ) {
1967 if ( !l->is_terminal( pose ) ) {
1968 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
1969 if (!option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
1975 if (!option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
1976 ccd_moves( 10, pose, movemap, (
int)l->start(), (
int)l->stop(), (
int)l->cut() );
1986 (*move_it)->apply( pose );
1987 mc.
boltzmann( pose,
"user_provided_simul" );
2001 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2003 if (basic::options::option[ OptionKeys::remodel::repeat_structure] == 1){
2008 for (
Size res = 1; res<=copy_size; res++){
2022 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2045 Real const cbreak_increment
2050 using namespace basic::options;
2051 using namespace OptionKeys::remodel;
2055 TR <<
"** independent_stage" << std::endl;
2062 for (
Loops::const_iterator l = pre_loops_to_model->begin(), le = pre_loops_to_model->end(); l != le; ++l ) {
2063 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2065 if ( !l->is_terminal( pose ) ) {
2066 loops_to_model->add_loop( *l );
2070 loops_to_model->add_loop( *l );
2074 loops_to_model->add_loop( *l );
2078 if (option[OptionKeys::remodel::no_jumps].user()){
2097 TR <<
" n_loops = " << loops_to_model->size() << std::endl;
2099 if ( loops_to_model->size() == 0 ) {
2108 for (
Loops::iterator l = loops_to_model->v_begin(), le = loops_to_model->v_end(); l != le; ++l ) {
2114 if (option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
2130 assert( !frag_movers.empty() );
2134 Size const max_inner_cycles = std::max( static_cast< Size >( 50 ), 10 * n_moveable );
2144 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2154 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2166 for (
Size outer = 1; outer <= max_outer_cycles; ++outer ) {
2174 if (option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
2178 if (option[OptionKeys::remodel::no_jumps].user() && option[OptionKeys::remodel::two_chain_tree].user()){
2182 if (option[OptionKeys::remodel::RemodelLoopMover::cyclic_peptide].user()){
2193 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2195 if (basic::options::option[ OptionKeys::remodel::repeat_structure] == 1){
2200 for (
Size res = 1; res<=copy_size; res++){
2210 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2213 for (
Size inner = 1; inner <= max_inner_cycles; ++inner ) {
2216 random_permutation( frag_movers.begin(), frag_movers.end(),
RG );
2217 for ( FragmentMoverOPs::iterator i = frag_movers.begin(), ie = frag_movers.end(); i != ie; ++i ) {
2218 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2223 (*i)->apply( pose );
2228 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2229 if (!option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
2235 if (!option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
2244 (*move_it)->apply( pose );
2245 mc.
boltzmann( pose,
"user_provided_indep" );
2259 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2261 if (basic::options::option[ OptionKeys::remodel::repeat_structure] == 1){
2266 for (
Size res = 1; res<=copy_size; res++){
2279 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2309 Real const cbreak_increment
2324 using namespace basic::options;
2325 using namespace OptionKeys::remodel;
2329 TR <<
"** boost_closure_stage" << std::endl;
2336 Real const cbreak_tolerance = 1.0;
2337 for (
Loops::const_iterator l = pre_loops_to_model->begin(), le = pre_loops_to_model->end(); l != le; ++l ) {
2338 if ( !l->is_terminal( pose ) || l->start() != 1 ) {
2340 if ( cbreak < cbreak_tolerance ) {
2341 loops_to_model->add_loop( *l );
2343 else if (cbreak >= cbreak_tolerance ){
2344 TR <<
"at least one loop is beyond tolerance" << std::endl;
2350 TR <<
" n_loops = " << loops_to_model->size() << std::endl;
2351 if ( loops_to_model->size() == 0 ) {
2356 Size smallestmer_size = ( *
fragsets_.begin() )->max_frag_length();
2357 for ( FragSetOPs::const_iterator f =
fragsets_.begin(), fe =
fragsets_.end(); f != fe; ++f ) {
2358 smallestmer_size = std::min( smallestmer_size, (*f)->max_frag_length() );
2360 TR <<
"** boost_closure stage: using fragment size = " << smallestmer_size << std::endl;
2366 Real const frag_mover_probability = 0.25;
2369 for (
Loops::const_iterator l = loops_to_model->begin(), le = loops_to_model->end(); l != le; ++l ) {
2370 Loop const & loop = *l;
2382 Size const max_inner_cycles = std::max( static_cast< Size >( 50 ), 10 * n_moveable );
2391 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2400 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2413 for (
Size outer = 1; outer <= max_outer_cycles; ++outer ) {
2421 if (option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
2425 if (option[OptionKeys::remodel::RemodelLoopMover::cyclic_peptide].user()){
2436 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2438 if (basic::options::option[ OptionKeys::remodel::repeat_structure] == 1){
2443 for (
Size res = 1; res<=copy_size; res++){
2452 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2463 for (
Size inner = 1; inner <= max_inner_cycles; ++inner ) {
2464 if ( (!frag1_movers.empty() &&
RG.uniform() < frag_mover_probability) || pose.
fold_tree().
num_cutpoint() == 0 ) {
2466 random_permutation( frag1_movers.begin(), frag1_movers.end(),
RG );
2467 for ( FragmentMoverOPs::iterator i = frag1_movers.begin(), ie = frag1_movers.end(); i != ie; ++i ) {
2468 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2474 (*i)->apply( pose );
2480 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2481 if (!option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
2487 if (!option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
2498 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2500 if (basic::options::option[ OptionKeys::remodel::repeat_structure] == 1){
2505 for (
Size res = 1; res<=copy_size; res++){
2519 if (basic::options::option[ OptionKeys::remodel::repeat_structure].user()){
2548 bool skip_loop =
false;
2554 if ( !l->is_terminal( pose ) ) {
2559 loops_to_model->add_loop( *l );
2564 random_permutation( loops_to_model->v_begin(), loops_to_model->v_end(),
RG );
2566 return loops_to_model;
2576 bool const show_in_tracer
2580 using namespace basic::options;
2581 using namespace OptionKeys::remodel;
2583 boost::format fmt(
"%|5t|%1% %|5t|%2% %|5t|%3% %|8t|%4%" );
2586 if (option[OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
2589 if (option[OptionKeys::remodel::lh_closure_filter].user()){
2590 TR <<
"using cbreak filter under bypass_closure." << std::endl;
2591 bool all_loops_pass =
true;
2594 if ( !l->is_terminal( pose ) ) {
2596 TR <<
"chain break " << cbreak << std::endl;
2600 if ( show_in_tracer ) {
2601 TR << fmt % l->start() % l->stop() % l->cut() % cbreak << std::endl;
2604 return all_loops_pass;
2613 if ( show_in_tracer ) {
2614 TR << fmt %
"start" %
"stop" %
"cut" %
"cbreak" << std::endl;
2617 bool all_loops_pass =
true;
2621 if ( !l->is_terminal( pose ) ) {
2626 if ( show_in_tracer ) {
2627 TR << fmt % l->start() % l->stop() % l->cut() % cbreak << std::endl;
2631 return all_loops_pass;
2642 Size const largest_frag_size
2648 for ( FragSetOPs::const_iterator f =
fragsets_.begin(), fe =
fragsets_.end(); f != fe; ++f ) {
2650 if ( largest_frag_size == 0 || (*f)->max_frag_length() <= largest_frag_size ) {
2652 cfm->set_check_ss(
false );
2653 cfm->enable_end_bias_check(
false );
2654 frag_movers.push_back( cfm );
2671 Size const largest_frag_size
2675 for ( FragSetOPs::const_iterator f =
fragsets_.begin(), fe =
fragsets_.end(); f != fe; ++f ) {
2677 if ( largest_frag_size == 0 || (*f)->max_frag_length() <= largest_frag_size ) {
2679 cfm->set_check_ss(
false );
2680 cfm->enable_end_bias_check(
false );
2681 frag_movers.push_back( cfm );
2695 Size const largest_frag_size
2729 bool const allow_omega
2747 bool const allow_omega
2754 for (
Size i = loop.
start(), ie = loop.
stop(); i <= ie; ++i ) {
2755 movemap.
set_bb( i,
true );
2758 if ( !allow_omega ) {
2773 Size n_moveable = 0;
2778 for (
Size i = left; i <= right; ++i ) {
2779 if ( movemap.
get_bb( i ) ) {
2797 using utility::string_split;
2801 String const sfxn ( tag->getOption<
String>(
"scorefxn",
"" ) );
2804 TR <<
"score function, " << sfxn <<
", is used. " << std::endl;
2808 String const loops_string ( tag->getOption<
String>(
"loops",
"" ) );
2809 runtime_assert( loops_string !=
"" );
2815 StringVec
loops ( string_split( loops_string,
',' ) );
2816 for ( StringVec::const_iterator loop( loops.begin() ),
end( loops.end() ); loop!=
end; ++loop ) {
2817 StringVec elements ( string_split( *loop,
'.' ) );
2818 runtime_assert( elements.size() == 2 || elements.size() == 1 );
2820 StringVec interval ( string_split( elements[1],
'-' ) );
2822 Size right = boost::lexical_cast<
Size>( interval[2] );
2823 runtime_assert( left < right && interval.size() == 2 );
2830 if ( elements.size() == 2 ){
2831 cutpoint = boost::lexical_cast<
Size>( elements[2] );
2833 cutpoint =
RG.random_range( 1, right - left ) +
left;
2836 TR <<
"Modelling loop " << ++num <<
": left=" << left <<
",right=" << right <<
",cutpoint=" << cutpoint << std::endl;
2838 loops_->add_loop(
Loop( left, right, cutpoint, 0.0,
true ) );
2843 String const fsets_string ( tag->getOption<
String>(
"fragsets",
"" ) );
2844 runtime_assert( ! fsets_string.empty() );
2845 StringVec
const fsets( string_split( fsets_string,
',' ) );
2846 for ( StringVec::const_iterator it( fsets.begin() ),
end( fsets.end() ); it!=
end; ++it ) {
2847 if ( data.
has(
"fragsets", *it ) ) {
2848 fsop = data.
get< FragSet* >(
"fragsets", *it );
2850 utility_exit_with_message(
"fragsets " + *it +
" not found in DataMap.");