22 #include <basic/Tracer.hh>
23 #include <basic/options/option.hh>
24 #include <basic/options/keys/OptionKeys.hh>
25 #include <basic/options/keys/rigid.OptionKeys.gen.hh>
26 #include <numeric/random/random.hh>
27 #include <numeric/xyzVector.hh>
42 #include <utility/vector1.hh>
44 #define _USE_MATH_DEFINES
52 static basic::Tracer
TR(
"protocols.moves.RigidBodyMotionMover");
55 double radians = std::acos(a.dot(b) / (a.length() * b.length()));
56 return radians * 180 / M_PI;
60 using namespace basic::options;
61 using namespace basic::options::OptionKeys;
78 TR <<
"No sensible action possible-- num_chunks=" <<
chunks_.
size() << endl;
81 TR <<
"Mismatching fold trees" << endl;
87 unsigned i = numeric::random::random_range(1,
chunks_.
size());
88 Jump jump = pose.
jump(i);
103 jump.set_rb_delta(Jump::TRANS_X, 1, tx);
104 jump.set_rb_delta(Jump::TRANS_Y, 1, ty);
105 jump.set_rb_delta(Jump::TRANS_Z, 1, tz);
108 jump.fold_in_rb_deltas();
118 bool has_prev = i > 1;
123 if (has_prev && has_next) {
134 *bias = (a +
b) / 2.0;
136 *bias = (numeric::random::uniform() < 0.9) ? a :
b;
138 }
else if (has_prev) {
140 *bias = pose.
xyz(NamedAtomID(
"CA", chunk.
start())) - pose.
xyz(NamedAtomID(
"CA", prev.
stop()));
141 }
else if (has_next) {
143 *bias = pose.
xyz(NamedAtomID(
"CA", chunk.
stop())) - pose.
xyz(NamedAtomID(
"CA", next.
start()));
181 assert(mag_rot >= 0);
186 assert(mag_trans >= 0);
191 assert(cb_bias >= 0);
192 assert(cb_bias <= 1);
203 return "RigidBodyMotionMover";