36 #include <basic/options/keys/remodel.OptionKeys.gen.hh>
37 #include <basic/options/option.hh>
42 #include <numeric/random/random.hh>
45 #include <utility/vector1.hh>
46 #include <ObjexxFCL/FArray1D.hh>
47 #include <ObjexxFCL/FArray2D.hh>
62 static numeric::random::RandomGenerator
RG( 313222 );
68 keep_known_bb_torsions_at_junctions_( false )
85 bool const keep_known_bb_torsions_at_junctions
90 keep_known_bb_torsions_at_junctions_( keep_known_bb_torsions_at_junctions )
116 bool const keep_known_bb_torsions_at_junctions
122 keep_known_bb_torsions_at_junctions_( keep_known_bb_torsions_at_junctions )
136 interval_( rval.interval_ ),
139 keep_known_bb_torsions_at_junctions_( rval.keep_known_bb_torsions_at_junctions_ )
149 if (
this != &rval ) {
245 for (
Size i = begin; i <=
end; ++i ) {
383 using namespace core::conformation;
442 runtime_assert( !( has_lower_terminus && has_upper_terminus ) );
446 Size n_cutpoints = 0;
466 Real left_endpoint_minus_one_omega = 999.0;
467 Real left_endpoint_phi = 999.0;
468 Real right_endpoint_psi = 999.0;
469 Real right_endpoint_omega = 999.0;
486 assert(
ss_.length() == r_types.size() );
503 if ( was_connected ) {
548 }
else if ( has_lower_terminus ) {
575 }
else if ( has_upper_terminus ) {
609 Size cut_index =
RG.random_range( 1, r_types.size() - 1);
613 if (basic::options::option[basic::options::OptionKeys::remodel::RemodelLoopMover::bypass_closure].user()){
614 if (basic::options::option[basic::options::OptionKeys::remodel::RemodelLoopMover::force_cutting_N].user()){
618 cut_index = r_types.size()-1;
654 if ( n_cutpoints == 0 ) {
659 ft.jump_edge( new_jump_number ).start_atom() =
"N";
660 ft.jump_edge( new_jump_number ).stop_atom() =
"C";
670 Edge jump_edge = ft.jump_edge( jump );
671 ft.delete_edge( jump_edge );
677 if ( static_cast< Size >( jump_edge.start() ) ==
interval_.
left ) {
678 jump_edge.start_atom() =
"N";
679 }
else if ( jump_edge.start_atom().empty() ) {
683 jump_edge.start_atom() = pose.
residue( jump_edge.start() ).atom_name(
688 if ( static_cast< Size >( jump_edge.stop() ) ==
interval_.
right ) {
689 jump_edge.stop_atom() =
"C";
690 }
else if ( jump_edge.stop_atom().empty() ) {
694 jump_edge.stop_atom() = pose.
residue( jump_edge.stop() ).atom_name(
699 ft.add_edge( jump_edge );
713 r_types.begin(), r_types.begin() + cut_index,
716 new_cut = left_of_cut;
724 r_types.rbegin(), r_types.rbegin() + ( r_types.size() - cut_index ),
728 runtime_assert( left_of_cut + 1 == right_of_cut );
745 bool ft_was_altered =
false;
747 if ( e->label() > 0 ) {
751 bool start_changed =
false;
752 if ( static_cast< Size >( tmp.start() ) ==
interval_.
left - 1 ) {
753 tmp.start_atom() =
"N";
754 start_changed =
true;
757 bool stop_changed =
false;
759 tmp.stop_atom() =
"C";
767 if ( start_changed && !stop_changed && tmp.stop_atom().empty() ) {
768 tmp.stop_atom() = pose.
residue( tmp.stop() ).atom_name(
774 if ( !start_changed && stop_changed && tmp.start_atom().empty() ) {
775 tmp.start_atom() = pose.
residue( tmp.start() ).atom_name(
778 start_changed =
true;
782 if ( start_changed && stop_changed ) {
783 ft.delete_edge( *e );
785 ft_was_altered =
true;
790 if ( ft_was_altered ) {
797 if (basic::options::option[basic::options::OptionKeys::remodel::no_jumps]){
809 ObjexxFCL::FArray1D_int Fcuts( num_jumps_pre_processing);
810 ObjexxFCL::FArray2D_int Fjumps(2, num_jumps_pre_processing);
812 for (
Size i = 1; i<= num_jumps_pre_processing; ++i ) {
815 Fjumps(1,i) = std::min( (
int)jumps[i].first, (
int)jumps[i].second);
816 Fjumps(2,i) = std::max( (
int)jumps[i].first, (
int)jumps[i].second);
824 if (*(it) == new_cut){
831 for (
Size i = 1; i<= cuts.size(); ++i ) {
833 Fcuts(i) = (
int)cuts[i];
839 nojump_ft.tree_from_jumps_and_cuts( pose.
total_residue(), num_jumps_pre_processing, Fjumps, Fcuts, ft.root(), true );
855 if ( pre_psi <= 360.0 ) {
858 if ( post_phi <= 360.0 ) {
871 if ( left_endpoint_minus_one_omega <= 360.0 ) {
875 if ( left_endpoint_phi <= 360.0 ) {
879 if ( right_endpoint_psi <= 360.0 ) {
883 if ( right_endpoint_omega <= 360.0 ) {