40 #include <basic/Tracer.hh>
41 #include <utility/vector1.hh>
42 #include <numeric/xyzVector.hh>
44 #include <numeric/xyz.functions.hh>
45 #include <numeric/random/random.hh>
46 #include <numeric/conversions.hh>
50 namespace ObjexxFCL {
namespace fmt { } }
using namespace ObjexxFCL::fmt;
59 static numeric::random::RandomGenerator
RG(67729);
60 static basic::Tracer
TR(
"protocols.moves.PoseMembraneRigidBodyMover");
63 MovePoseToMembraneCenterMover::MovePoseToMembraneCenterMover() : moves::Mover(
"MovePoseToMembraneCenterMover")
75 Real const pose_shifted_from_membrane_center( membrane_normal.dot( current_pose_center-membrane_center ) );
76 using namespace ObjexxFCL::fmt;
78 if ( fabs(pose_shifted_from_membrane_center) > 20.) {
79 Vector shift_back = -pose_shifted_from_membrane_center * membrane_normal;
82 whole_body_translation_mover.
apply(pose);
97 Vector sum_membrane_anchor(0);
109 sum_membrane_anchor+=
start;
110 sum_membrane_anchor+=
end;
112 center = 0.5*(sum_membrane_anchor)/(
float)topology.
tmh_inserted();
117 using namespace core::conformation::symmetry;
119 dynamic_cast< SymmetricConformation const & > ( pose.
conformation() ) );
122 for (
Size i_clone = 1; i_clone <= symm_info->num_bb_clones(); ++i_clone) {
130 sum_membrane_anchor+=
start;
131 sum_membrane_anchor+=
end;
134 center = 0.5*(sum_membrane_anchor)/(
float)(symm_info->num_bb_clones() + 1)/(
float)topology.
tmh_inserted();
147 return "MovePoseToMembraneCenterMover";
164 Vector const trans_vect = random_translation * membrane_normal;
167 move_pose_to_membrane_mover.
apply(pose);
170 whole_body_translation_mover.
apply(pose);
174 return "MembraneCenterPerturbationMover";
179 Mover(
"MembraneNormalPerturbationMover"),
195 test_vec.x() = 1.; test_vec.y() = 1.; test_vec.z() = 1.;
196 Vector x_axis (test_vec.cross(membrane_normal).normalize());
197 Vector y_axis (membrane_normal.cross(x_axis).normalize());
199 Real random_angle (numeric::conversions::radians(360.) * RG.uniform());
200 Vector random_axis (cos(random_angle) * x_axis + sin(random_angle) * y_axis);
204 move_pose_to_membrane_mover.
apply(pose);
207 whole_body_rotation_mover.
apply(pose);
211 return "MembraneNormalPerturbationMover";
221 using namespace ObjexxFCL::fmt;
293 return "WholeBodyTranslationMover";
335 return "WholeBodyRotationMover";