22 #include <basic/basic.hh>
26 #include <basic/options/option.hh>
28 #include <basic/options/keys/bbg.OptionKeys.gen.hh>
31 #include <utility/exit.hh>
32 #include <basic/Tracer.hh>
33 #include <numeric/random/random.hh>
43 #include <utility/vector1.hh>
48 using namespace core::pose;
49 using namespace utility;
50 using namespace numeric;
51 using namespace basic::options;
52 using namespace basic::options::OptionKeys;
54 static basic::Tracer
TR(
"protocols.simple_moves.BBGaussianMover");
55 static numeric::random::RandomGenerator
RG(6233);
58 namespace simple_moves {
61 BBGaussianMover::BBGaussianMover(
Size n_end_atom,
Size n_dof_angle,
Size n_pert_res)
63 n_end_atom_(n_end_atom),
64 n_dof_angle_(n_dof_angle),
65 n_pert_res_(n_pert_res),
66 matrix_G(n_dof_angle_,utility::
vector1<
Real>(n_dof_angle_)),
67 matrix_A(n_dof_angle_,utility::
vector1<
Real>(n_dof_angle_)),
68 matrix_dRdPhi(n_end_atom_,utility::
vector1<
Vector>(n_dof_angle_)),
69 last_proposal_density_ratio_(1.0)
73 movemap->set_bb(
true);
88 using namespace basic::options;
89 using namespace basic::options::OptionKeys;
116 if ( rsd.is_protein()
120 && (!option[bbg::ignore_improper_res] || pose.
residue(n).
name1()!=
'P') )
131 int first(n-seg_len);
137 && (!option[bbg::ignore_improper_res] || pose.
residue(n).
name1()!=
'P') )
148 int l_num(first + 1 - static_cast< int >(
n_pert_res_));
150 for (;l_num<=last;r_num++,l_num++)
156 if (option[bbg::fix_short_segment] && l_num<first)
continue;
157 else part1 = l_num<first?first:l_num;
158 if (option[bbg::fix_short_segment] && r_num>last)
continue;
159 else part2 = r_num>last?last:r_num;
162 std::pair<Size, Size> seg(part1,part2);
192 for (sum=a[i][j],k=i-1;k>=1;k--) sum -= a[i][k]*a[j][k];
195 runtime_assert(sum>0.0);
205 for(i=from; i<=to; i++)
208 for(j=from; j<i; j++)
216 for (sum=delta[i],k=i+1;k<=n;k++) sum-=a[k][i]*dphi[k];
221 for (i=1;i<=n;i++) detL*=p[i];
235 for (sum=a[i][j],k=i-1;k>=1;k--) sum -= a[i][k]*a[j][k];
238 runtime_assert(sum>0.0);
248 for(i=from; i<=to; i++)
251 for(j=from; j<i; j++)
259 delta[i]=p[i]*dphi[i];
260 for (j=i+1;j<=n;j++) delta[i]+=a[j][i]*dphi[j];
264 for (i=1;i<=n;i++) detL*=p[i];
272 static Real big_angle_= 12.0;
277 Real new_phi_ = basic::periodic_range( old_phi_ +
RG.gaussian() * big_angle_, 360.0 );
281 Real new_psi_ = basic::periodic_range( old_psi_ +
RG.gaussian() * big_angle_, 360.0 );
331 return "BBG8T3AMover";
347 rsd4.atom(
"C").xyz(),
351 rsd4.atom(
"CA").xyz(),
354 matrix_dRdPhi[i][6] =
get_dRdPhi(rsd3.atom(
"CA").xyz(),
355 rsd3.atom(
"C").xyz(),
358 matrix_dRdPhi[i][5] =
get_dRdPhi(rsd3.atom(
"N").xyz(),
359 rsd3.atom(
"CA").xyz(),
362 matrix_dRdPhi[i][4] =
get_dRdPhi(rsd2.atom(
"CA").xyz(),
363 rsd2.atom(
"C").xyz(),
366 matrix_dRdPhi[i][3] =
get_dRdPhi(rsd2.atom(
"N").xyz(),
367 rsd2.atom(
"CA").xyz(),
370 matrix_dRdPhi[i][2] =
get_dRdPhi(rsd1.atom(
"CA").xyz(),
371 rsd1.atom(
"C").xyz(),
374 matrix_dRdPhi[i][1] =
get_dRdPhi(rsd1.atom(
"N").xyz(),
375 rsd1.atom(
"CA").xyz(),
483 Real W_old = detL*exp(-d2/2.0);
627 Real W_new = detL*exp(-d2/2.0);