33 #include <numeric/xyz.functions.hh>
34 #include <numeric/constants.hh>
35 #include <numeric/conversions.hh>
36 #include <numeric/deriv/distance_deriv.hh>
37 #include <numeric/deriv/angle_deriv.hh>
39 #include <numeric/numeric.functions.hh>
41 #include <utility/vector1.hh>
71 potential_(
ScoringManager::get_instance()->get_CenHBPotential( ) ) { }
83 potential_( src.potential_ ) { }
118 Vector bbH, bbO, bbC, bbN;
125 r = bbH.distance( bbO );
129 xd = numeric::angle_degrees( bbN,bbH,bbO );
130 xh = numeric::angle_degrees( bbH,bbO,bbC );
141 r = bbH.distance( bbO );
145 xd = numeric::angle_degrees( bbN,bbH,bbO );
146 xh = numeric::angle_degrees( bbH,bbO,bbC );
170 using numeric::constants::f::pi;
171 using namespace numeric::deriv;
172 Size idxH, idxO, idxC, idxN;
173 Vector bbH, bbO, bbC, bbN;
181 r = bbH.distance( bbO );
185 xd = numeric::angle_degrees( bbN,bbH,bbO );
186 xh = numeric::angle_degrees( bbH,bbO,bbC );
192 dfunc[1] *= -weight * 180/pi;
193 dfunc[2] *= -weight * 180/pi;
198 Real temp_dist, temp_ang;
199 distance_f1_f2_deriv(bbH, bbO, temp_dist, f1, f2);
200 r1_atom_derivs[ idxH ].f1() += dfunc[0] * f1;
201 r1_atom_derivs[ idxH ].f2() += dfunc[0] * f2;
202 r2_atom_derivs[ idxO ].f1() += -dfunc[0] * f1;
203 r2_atom_derivs[ idxO ].f2() += -dfunc[0] * f2;
206 angle_p1_deriv( bbO, bbH, bbN, temp_ang, f1, f2);
207 r2_atom_derivs[ idxO ].f1() += dfunc[1] * f1;
208 r2_atom_derivs[ idxO ].f2() += dfunc[1] * f2;
209 angle_p1_deriv( bbN, bbH, bbO, temp_ang, f1, f2);
210 r1_atom_derivs[ idxN ].f1() += dfunc[1] * f1;
211 r1_atom_derivs[ idxN ].f2() += dfunc[1] * f2;
212 angle_p2_deriv( bbN, bbH, bbO, temp_ang, f1, f2);
213 r1_atom_derivs[ idxH ].f1() += dfunc[1] * f1;
214 r1_atom_derivs[ idxH ].f2() += dfunc[1] * f2;
217 angle_p1_deriv( bbH, bbO, bbC, temp_ang, f1, f2);
218 r1_atom_derivs[ idxH ].f1() += dfunc[2] * f1;
219 r1_atom_derivs[ idxH ].f2() += dfunc[2] * f2;
220 angle_p1_deriv( bbC, bbO, bbH, temp_ang, f1, f2);
221 r2_atom_derivs[ idxC ].f1() += dfunc[2] * f1;
222 r2_atom_derivs[ idxC ].f2() += dfunc[2] * f2;
223 angle_p2_deriv( bbC, bbO, bbH, temp_ang, f1, f2);
224 r2_atom_derivs[ idxO ].f1() += dfunc[2] * f1;
225 r2_atom_derivs[ idxO ].f2() += dfunc[2] * f2;
232 r = bbH.distance( bbO );
236 xd = numeric::angle_degrees( bbN,bbH,bbO );
237 xh = numeric::angle_degrees( bbH,bbO,bbC );
242 dfunc[1] *= -weight * 180/pi;
243 dfunc[2] *= -weight * 180/pi;
249 Real temp_dist, temp_ang;
250 distance_f1_f2_deriv(bbH, bbO, temp_dist, f1, f2);
251 r2_atom_derivs[ idxH ].f1() += dfunc[0] * f1;
252 r2_atom_derivs[ idxH ].f2() += dfunc[0] * f2;
253 r1_atom_derivs[ idxO ].f1() -= dfunc[0] * f1;
254 r1_atom_derivs[ idxO ].f2() -= dfunc[0] * f2;
257 angle_p1_deriv( bbO, bbH, bbN, temp_ang, f1, f2);
258 r1_atom_derivs[ idxO ].f1() += dfunc[1] * f1;
259 r1_atom_derivs[ idxO ].f2() += dfunc[1] * f2;
260 angle_p1_deriv( bbN, bbH, bbO, temp_ang, f1, f2);
261 r2_atom_derivs[ idxN ].f1() += dfunc[1] * f1;
262 r2_atom_derivs[ idxN ].f2() += dfunc[1] * f2;
263 angle_p2_deriv( bbN, bbH, bbO, temp_ang, f1, f2);
264 r2_atom_derivs[ idxH ].f1() += dfunc[1] * f1;
265 r2_atom_derivs[ idxH ].f2() += dfunc[1] * f2;
268 angle_p1_deriv( bbH, bbO, bbC, temp_ang, f1, f2);
269 r2_atom_derivs[ idxH ].f1() += dfunc[2] * f1;
270 r2_atom_derivs[ idxH ].f2() += dfunc[2] * f2;
271 angle_p1_deriv( bbC, bbO, bbH, temp_ang, f1, f2);
272 r1_atom_derivs[ idxC ].f1() += dfunc[2] * f1;
273 r1_atom_derivs[ idxC ].f2() += dfunc[2] * f2;
274 angle_p2_deriv( bbC, bbO, bbH, temp_ang, f1, f2);
275 r1_atom_derivs[ idxO ].f1() += dfunc[2] * f1;
276 r1_atom_derivs[ idxO ].f2() += dfunc[2] * f2;