28 #define rad2deg 57.2957795130823208767981548141051703
29 #define deg2rad 0.0174532925199432957692369076848861271
30 #define pi 3.14159265358979323846264338327950288
37 namespace kinematic_closure {
40 Real d11, d12, d13, d22, d23, d33;
41 d11 = vbond[1]*vbond[1];
42 d22 = vbond[2]*vbond[2];
43 d33 = vbond[3]*vbond[3];
44 d12 = 2*vbond[1]*vbond[2];
45 d13 = 2*vbond[1]*vbond[3];
46 d23 = 2*vbond[2]*vbond[3];
47 calpha[1]=(d22-d33-d11)/d13;
48 salpha[1]=std::sqrt(1-calpha[1]*calpha[1]);
49 calpha[2]=(d33-d11-d22)/d12;
50 salpha[2]=std::sqrt(1-calpha[2]*calpha[2]);
51 calpha[3]=(d11-d22-d33)/d23;
52 salpha[3]=std::sqrt(1-calpha[3]*calpha[3]);
62 for (
int i=1; i<=3; i++ ) {
63 cosine[i]=std::cos(theta[i]);
64 sine[i]=std::sin(theta[i]);
70 for (
int i=1; i<=3; i++ ) {
71 a[i]=std::tan(theta[i]/2);
75 cosine[i]=(1-aa[i])/a1[i];
101 utility::vector1<Real> ctheta (4), calpha (4), salpha (4), cxi (3), sxi (3), ceta (4), seta (4), cdelta (3), sdelta (3), caceta (4), caseta (4), saceta (4), saseta (4), capeta (4), sapeta (4), cameta (4), sameta (4);
106 for (
int i=1; i<=4; i++ ) {
108 for (
int j=1; j<=3; j++ ) {
118 for (
int i=1; i<=3; i++ ) {
119 for (
int j=1; j<=3; j++ ) {
128 if ( (
std::abs(vb[1] - vb[2]) <= vb[3]) && (vb[1] + vb[2] >= vb[3]) ) {
131 for (
int i=1; i<=3; i++ ) {
132 ctheta[i]=std::cos(theta[i]);
137 for (
int i=1; i<=3; i++ ) {
142 sincos(eta, 2, ceta, seta);
143 sincos(delta, 2, cdelta, sdelta);
144 calpha[4] = calpha[1];
145 salpha[4] = salpha[1];
148 ctheta[4] = ctheta[1];
149 for (
int i=1; i<=4; i++ ) {
150 caceta[i] = calpha[i] * ceta[i];
151 caseta[i] = calpha[i] * seta[i];
152 saceta[i] = salpha[i] * ceta[i];
153 saseta[i] = salpha[i] * seta[i];
154 capeta[i] = caceta[i] - saseta[i];
155 sapeta[i] = saceta[i] + caseta[i];
156 cameta[i] = caceta[i] + saseta[i];
157 sameta[i] = saceta[i] - caseta[i];
159 for (
int i=2; i<=4; i++ ) {
160 Real am, ap, cdsx, sdsx,
b, bm, bp, d, dp, dm;
161 am = cxi[i-1]*cameta[i] + ctheta[i];
162 ap = cxi[i-1]*capeta[i] + ctheta[i];
163 cdsx = cdelta[i-1]*sxi[i-1];
164 sdsx = 2*sdelta[i-1]*sxi[i-1];
181 for (
int i=1; i<=3; i++ ) {
182 for (
int j=1; j<=3; j++ ) {
183 p[1][i][j]=p[4][i][j];
190 for (
int i=1; i<=3; i++ ) {
195 for (
int k=1; k<=3; k++ ) {
196 for (
int i=1; i<=3; i++ ) {
197 L[k][i] = p[order[1]][i][k];
198 M[k][i] = p[order[2]][k][i];
199 N[k][i] = p[order[3]][k][i];
203 for (
int i=1; i<=3; i++ ) {
204 for (
int j=1; j<=3; j++ ) {
206 A[i][j] = M[i][2]*N[1][j] - M[i][1]*N[2][j];
207 B[i][j] = M[i][3]*N[1][j] - M[i][1]*N[3][j];
208 C[i][j] = M[i][3]*N[2][j] - M[i][2]*N[3][j];
214 for (
int i=1; i<=3; i++ ) {
215 for (
int j=1; j<=3; j++ ) {
232 r[1]=L[2]*r0[3]-L[3]*r0[2];
233 r[2]=L[3]*r0[1]-L[1]*r0[3];
234 r[3]=L[1]*r0[2]-L[2]*r0[1];
250 for (
int i=1; i<=3; i++ ) {
253 for (
int i=1; i<=3; i++ ) {
254 U[1][i]=R[2][i]-R[1][i];
256 norm1=std::sqrt(U[1][1]*U[1][1] + U[1][2]*U[1][2] + U[1][3]*U[1][3]);
257 for (
int i=1; i<=3; i++ ) {
259 dR3R2[i]=R[3][i]-R[2][i];
261 cross(U[1], dR3R2, U[3]);
262 norm3=std::sqrt(U[3][1]*U[3][1] + U[3][2]*U[3][2] + U[3][3]*U[3][3]);
263 for (
int i=1; i<=3; i++ ) {
266 cross(U[3], U[1], U[2]);
275 for (
int i=1; i<=3; i++ ) {
276 d += (a[i]-b[i]) * (c[i]-b[i]);
291 for (
int i=1; i<=3; i++ ) {
297 for (
int i=1; i<=3; i++ ) {
299 s[i][1] = c[i] - b[i];
300 s[i][2] = a[i] - b[i];
304 cross(sc1, sc2, cs12);
305 for (
int i=1; i<=3; i++ ) {
309 cross(sc3, sc1, cs31);
310 for (
int i=1; i<=3; i++ ) {
313 for (
int i=2; i<=3; i++ ) {
314 Real f = std::sqrt(
pow(s[1][i],2) +
pow(s[2][i],2) +
pow(s[3][i],2));
319 Real y = r[1]*s[1][2] + r[2]*s[2][2] + r[3]*s[3][2];
320 Real z = r[1]*s[1][3] + r[2]*s[2][3] + r[3]*s[3][3];
350 xi=
bondangle(atoms[n-1], atoms[n], atoms[1]);
351 eta=
bondangle(atoms[n], atoms[1], atoms[2]);
352 delta=
torsion(atoms[n-1], atoms[n], atoms[1], atoms[2]);
386 for (
int i=1; i<=n; i++ ) {
393 for (
int i=1; i<=n; i++ ) {
394 for (
int j=1; j<=3; j++ ) {
401 atoms[2][1] = b_len[1];
403 ca = std::cos(b_ang[2]);
404 sa = std::sin(b_ang[2]);
405 atoms[3][1] = b_len[1] - b_len[2] * ca;
406 atoms[3][2] = b_len[2] * sa;
411 for (
int i=1; i<=3; i++ ) {
418 for (
int i=1; i<=2; i++ ) {
433 for (
int j=4; j<=n1; j++ ) {
434 ca = std::cos(b_ang[j1]);
435 sa = std::sin(b_ang[j1]);
436 ct = std::cos(t_ang[j2]);
437 st = std::sin(t_ang[j2]);
438 for (
int i=1; i<=3; i++ ) {
441 for (
int i=1; i<=3; i++ ) {
442 U[2][i] = s[i]*ct + U[3][i]*st;
444 for (
int i=1; i<=3; i++ ) {
445 U[3][i] = -s[i]*st + U[3][i]*ct;
447 for (
int i=1; i<=3; i++ ) {
450 for (
int i=1; i<=3; i++ ) {
451 U[2][i] = -s[i]*ca - U[1][i]*sa;
453 for (
int i=1; i<=3; i++ ) {
454 U[1][i] = s[i]*sa - U[1][i]*ca;
456 for (
int i=1; i<=3; i++ ) {
457 atoms[j][i] = atoms[j1][i] + b_len[j1] * U[1][i];
467 ca = std::cos(b_ang[n1]);
468 sa = std::sin(b_ang[n1]);
469 ct = std::cos(t_ang[n2]);
470 st = std::sin(t_ang[n2]);
471 v[1] = -b_len[n1] * ca;
478 for (
int i=1; i<=3; i++ ) {
479 s[i] = (U[1][i] *
v[1]) + (U[2][i] *
v[2]) + (U[3][i] * v[3]);
482 for (
int i=1; i<=3; i++ ) {
483 atoms[n][i] = atoms[n1][i] + s[i];
488 if ( space ==
true ) {
494 for (
int ind=1; ind<=n; ind++ ) {
495 for (
int i=1; i<=3; i++ ) {
497 for (
int j=1; j<=3; j++ ) {
498 inner_sum += (Q[i][j] * atoms[ind][j]);
500 spaceatoms[i]=R0[i]+inner_sum;
502 for (
int k=1; k<=3; k++ ) {
503 atoms[ind][k]=spaceatoms[k];
559 chainXYZ(n, b_len, b_ang, t_ang,
false, dummy_R0, dummy_Q, atoms);
581 for (
int i=1; i<=3; i++ ) {
586 for (
int j=1; j <= n-1; j++ ) {
590 for (
int j=2; j <= n-1; j++ ) {
591 b_ang[j] =
bondangle( atoms[j-1], atoms[j], atoms[j+1] );
593 b_ang[n] =
bondangle( atoms[n-1], atoms[n], atoms[1] );
594 b_ang[1] =
bondangle( atoms[n], atoms[1], atoms[2] );
597 for (
int j=2; j <= n-2; j++ ) {
598 t_ang[j] =
torsion( atoms[j-1], atoms[j], atoms[j+1], atoms[j+2] );
600 t_ang[n-1] =
torsion( atoms[n-2], atoms[n-1], atoms[n], atoms[1] );
601 t_ang[n] =
torsion( atoms[n-1], atoms[n], atoms[1], atoms[2] );
602 t_ang[1] =
torsion( atoms[n] , atoms[1], atoms[2], atoms[3] );
604 for (
int j=1; j<=n; j++ ) {
613 for (
int i=1; i<=dim1; i++ ) {
614 Rx[i].resize(R[i].
size());
616 Rx[i][2] = c*R[i][2] - s*R[i][3];
617 Rx[i][3] = s*R[i][2] + c*R[i][3];
624 for (
int i=1; i<=dim1; i++ ) {
625 Ry[i].resize(R[i].
size());
626 Ry[i][1] = c*R[i][1] + s*R[i][3];
628 Ry[i][3] = -s*R[i][1] + c*R[i][3];
635 for (
int i=1; i<=dim1; i++ ) {
636 Rz[i].resize(R[i].
size());
637 Rz[i][1] = c*R[i][1] - s*R[i][2];
638 Rz[i][2] = s*R[i][1] + c*R[i][2];
702 int k1, k2, k3,
l1, l2, l3, l3a, l3b,
f;
726 for (
int i=pivots[1]; i<=pivots[2]; i++ ) {
730 for (
int i=pivots[2]; i<=pivots[3]; i++ ) {
734 for (
int i=pivots[1]; i<=pivots[2]; i++ ) {
738 for (
int i=pivots[2]; i<=pivots[3]; i++ ) {
742 for (
int i=pivots[1]; i<=pivots[2]; i++ ) {
743 b_len1[ind++] = db[i];
746 for (
int i=pivots[2]; i<=pivots[3]; i++ ) {
747 b_len2[ind++] = db[i];
750 chainXYZ( l1, b_len1, b_ang1, t_ang1,
false, R0, Q0, chain1 );
751 chainXYZ( l2, b_len2, b_ang2, t_ang2,
false, R0, Q0, chain2 );
755 for (
int i=k3; i<=N; i++ ) {
756 chain3[ind++] = atoms[i];
758 for (
int i=1; i<=k1; i++ ) {
759 chain3[ind++] = atoms[i];
772 chainParams( l1, chain1, vbond[1], xi[1], eta[1], delta[1], R1, frame1 );
773 for (
int i=1; i<=
l1; i++ ) {
774 for (
int j=1; j<=3; j++ ) {
775 chain1[i][j] -= R1[j];
779 chainParams( l2, chain2, vbond[2], xi[2], eta[2], delta[2], R2, frame2 );
780 for (
int i=1; i<=l2; i++ ) {
781 for (
int j=1; j<=3; j++ ) {
782 chain2[i][j] -= R2[j];
786 chainParams( l3, chain3, vbond[3], xi[3], eta[3], delta[3], R3, frame3 );
787 for (
int i=1; i<=3; i++ ) {
788 theta[i] =
deg2rad * da[pivots[i]];
796 triaxialCoefficients( vbond, xi, eta, delta, theta, order, A, B, C, D, cal, sal, f );
804 dixon_eig( A, B, C, D, order, cosines, sines, taus, nsol );
811 for (
int j=1; j<=nsol; j++ ) {
812 rotateX(fchain1, cosines[j][1], sines[j][1], chain1a);
813 rotateZ(chain1a, cal[1], sal[1], chain1b);
814 for (
unsigned k=1; k<=chain1b.size(); k++ ) {
815 chain1b[k][1] += vbond[3];
817 rotateX(fchain2, cosines[j][2], sines[j][2], chain2a);
818 rotateZ(chain2a, cal[3], -sal[3], chain2b);
819 for (
unsigned k=1; k<=chain2b.size(); k++ ) {
820 chain2b[k][1] -= chain2b[l2][1];
821 chain2b[k][2] -= chain2b[l2][2];
823 int chain12len = (l1-1) + (l2-2);
824 chain12.resize(chain12len);
826 for (
int k=2; k<=
l1; k++ ) {
827 chain12[ind].resize(3);
828 for (
int n=1; n<=3; n++ ) {
829 chain12[ind][n] = chain1b[k][n];
833 for (
int k=2; k<=l2-1; k++ ) {
834 chain12[ind].resize(3);
835 for (
int n=1; n<=3; n++ ) {
836 chain12[ind][n] = chain2b[k][n];
840 rotateX(chain12, cosines[j][3], -sines[j][3], chain12rX);
842 for (
int k=1; k<=chain12len; k++ ) {
843 for (
int n=1; n<=3; n++ ) {
844 chain12[k][n] += R3[n];
850 for (
int k=1; k<=l3b; k++ ) {
851 loop[j][k].resize(3);
852 for (
int kk=1; kk<=3; kk++ ) {
853 loop[j][k][kk] = chain3[l3a+k][kk];
856 for (
int k=1; k<= l1 + l2 - 3; k++ ) {
857 loop[j][l3b+k].resize(3);
858 for (
int kk=1; kk<=3; kk++ ) {
859 loop[j][l3b+k][kk] = chain12[k][kk];
862 for (
int k=1; k<=l3a; k++ ) {
863 loop[j][l3b+l1+l2-3+k].resize(3);
864 for (
int kk=1; kk<=3; kk++ ) {
865 loop[j][l3b+l1+l2-3+k][kk] = chain3[k][kk];
872 int pivots2m1 = pivots[2]-1, pivots2p1 = pivots[2]+1,
873 pivots3m1 = pivots[3]-1, pivots3p1 = pivots[3]+1;
878 t_ang[j][4] =
static_cast<Real> (
torsion(loop[j][3],loop[j][4],loop[j][5],loop[j][6]));
879 t_ang[j][5] =
static_cast<Real> (
torsion(loop[j][4],loop[j][5],loop[j][6],loop[j][7]));
880 t_ang[j][pivots2m1] =
static_cast<Real> (
torsion(loop[j][pivots[2]-2],loop[j][pivots2m1],
881 loop[j][pivots[2]],loop[j][pivots2p1]));
882 t_ang[j][pivots[2]] =
static_cast<Real> (
torsion(loop[j][pivots2m1],loop[j][pivots[2]],
883 loop[j][pivots2p1],loop[j][pivots[2]+2]));
884 t_ang[j][pivots3m1] =
static_cast<Real> (
torsion(loop[j][pivots[3]-2],loop[j][pivots3m1],
885 loop[j][pivots[3]],loop[j][pivots3p1]));
886 t_ang[j][pivots[3]] =
static_cast<Real> (
torsion(loop[j][pivots3m1],loop[j][pivots[3]],
887 loop[j][pivots3p1],loop[j][pivots[3]+2]));
899 Real t_ang0vals[] = {36.0213, 0.0, 253.8843, 52.8441, 36.0366, 359.8985, 253.9602, 52.8272};
900 Real b_ang0vals[] = {114.9908, 114.9805, 115.0112, 114.9923, 114.9582, 115.0341, 114.9920, 115.0594};
901 Real b_len0vals[] = {1.5200, 1.5202, 1.5197, 1.5205, 1.5198, 1.5201, 1.5197, 1.5196};
902 Real dtvals[] = {180.0000, 180.0000, -5.3651, 180.0000, 180.0000, 180.0000, 180.0000, -5.0393};
912 for (
int i=1; i<=8; i++ ) {
913 t_ang0[i]=t_ang0vals[ind++];
917 for (
int i=1; i<=8; i++ ) {
918 b_ang0[i]=b_ang0vals[ind++];
922 for (
int i=1; i<=8; i++ ) {
923 b_len0[i]=b_len0vals[ind++];
927 for (
int i=1; i<=8; i++ ) {
931 for (
int i=1; i<=8; i++ ) {
935 for (
int i=1; i<=8; i++ ) {
947 bridgeObjects(atoms, dt, db, da, pivots, order, t_ang, b_ang, b_len, nsol);
1049 Real cos1 = -0.852235910816473;
1050 Real sin1 = -0.523157674429820;
1051 Real chain1vals[] = { 0.0, 0.0, 0.0, 0.644662961550365, 1.376520855637543, 0.0, 2.163059129530747, 1.374750785448438, -0.069784983442129, 2.807722091081112, 0.0, 0.0 };
1055 for (
int i=1; i<=4; i++ ) {
1056 chain1[i].resize(3);
1057 for (
int j=1; j<=3; j++ ) {
1058 chain1[i][j]=chain1vals[ind++];
1061 rotateX(chain1, cos1, sin1, chain1a);
1069 Real atomVals[] = {2.1636, 1.3766, 0, 1.6816, 2.3109, 1.0978, 1.1202, 3.6372, 0.6119, -0.3753, 3.6409, 0.3402, -1.0556, 2.2881, 0.4729, -0.6424, 1.2567, -0.5643, 0.0, 0.0, 0.0, 1.5200, 0.0, 0.0};
1077 for (
int i=1; i<=n; i++ ) {
1079 for (
int j=1; j<=3; j++ ) {
1080 atoms[i][j]=atomVals[ind++];
1084 chainTORS(n, atoms, t_ang, b_ang, b_len, R0, Q);
1116 for (
int i=1; i<=n; i++ ) {
1120 t_ang[1] = 334.5902397604552;
1121 t_ang[2] = 52.8271503523038;
1122 t_ang[3] = 334.6192090171498;
1126 for (
int i=1; i<=3; i++ ) {
1129 for (
int j=1; j<=3; j++ ) {
1130 (i==j) ? Q[i][j]=1.0 : Q[i][j]=0.0;
1134 chainXYZ(n, b_len, b_ang, t_ang,
false, R0, Q, atoms);
1217 Real vbond, xi, eta, delta;
1218 Real atomVals[] = { -0.160000000000000, 1.225000000000001, -2.247000000000002, \
1219 -0.642082009325601, 1.113981114034975, -0.809755503317661, \
1220 0.000939232598462, -0.000706370692062, -0.000808351874906, \
1221 -0.481142776727140, -0.111725256657088, 1.436436144807435 };
1225 for (
int i=1; i<=4; i++ ) {
1227 for (
int j=1; j<=3; j++ ) {
1228 atoms[i][j]=atomVals[ind++];
1232 chainParams(n, atoms, vbond, xi, eta, delta, R0, Q);
1251 a[1]= 0.000939232598461515;
1252 a[2]= -0.000706370692062031;
1253 a[3]= -0.000808351874906243;
1254 b[1]= -0.481142776727140;
1255 b[2]= -0.111725256657088;
1256 b[3]= 1.436436144807435;
1257 c[1]= -0.160000000000000;
1258 c[2]= 1.225000000000001;
1259 c[3]= -2.247000000000002;
1260 d[1]= -0.642082009325601;
1261 d[2]= 1.113981114034975;
1262 d[3]= -0.809755503317661;
1270 a[1]= 0.000939232598461515;
1271 a[2]= -0.000706370692062031;
1272 a[3]= -0.000808351874906243;
1273 b[1]= -0.481142776727140;
1274 b[2]= -0.111725256657088;
1275 b[3]= 1.436436144807435;
1276 c[1]= -0.160000000000000;
1277 c[2]= 1.225000000000001;
1278 c[3]= -2.247000000000002;
1286 a[1]= 0.000939232598461515;
1287 a[2]= -0.000706370692062031;
1288 a[3]= -0.000808351874906243;
1289 b[1]= -0.481142776727140;
1290 b[2]= -0.111725256657088;
1291 b[3]= 1.436436144807435;
1292 c[1]= -0.160000000000000;
1293 c[2]= 1.225000000000001;
1294 c[3]= -2.247000000000002;
1302 a[1]= -0.481142776727140;
1303 a[2]= -0.111725256657088;
1304 a[3]= 1.436436144807435;
1305 b[1]= -0.160000000000000;
1306 b[2]= 1.225000000000001;
1307 b[3]= -2.247000000000002;
1315 Real Rvals[] = { -0.160000000000000, 1.225000000000001, -2.247000000000002, \
1316 -0.481142776727140, -0.111725256657088, 1.436436144807435, \
1317 -0.642082009325601, 1.113981114034975, -0.809755503317661 };
1321 for (
int i=1; i<=3; i++ ) {
1323 for (
int j=1; j<=3; j++ ) {
1324 R[i][j]=Rvals[ind++];
1333 L[1]= -0.081681961343163;
1334 L[2]= -0.339993139043773;
1335 L[3]= 0.936873909656095;
1336 r0[1]= -0.160939232598461;
1337 r0[2]= 1.225706370692063;
1338 r0[3]= -2.246191648125096;
1358 vb[1] = 2.807722146231753;
1359 vb[2] = 2.563909995271172;
1360 vb[3] = 2.807373715195975;
1361 xi[1] = 1.132805948744302;
1362 xi[2] = 0.567232006898157;
1363 xi[3] = 1.133000954486070;
1364 eta[1] = 1.132805948744302;
1365 eta[2] = 0.567232006898157;
1366 eta[3] = 1.133000954486070;
1367 delta[1]= 6.232466452684100;
1369 delta[3]= 6.235542719576548;
1370 theta[1]= 2.007128639793479;
1371 theta[2]= 2.007128639793479;
1372 theta[3]= 2.007128639793479;
1377 triaxialCoefficients(vb, xi, eta, delta, theta, order, A, B, C, D, cal, sal, f);
1379 dixon_sturm(A,B,C,D,order,sines,cosines,tau,nsol);
1395 theta[1]=1.132805948744302;
1396 theta[2]=0.567232006898157;
1397 theta[3]=1.133000954486070;
1399 sincos(theta, flag, cosine, sine);
1405 vbond[1]=2.807722146231753;
1406 vbond[2]=2.563909995271172;
1407 vbond[3]=2.807373715195975;
void multTransMatrix(const utility::vector1< utility::vector1< Real > > &A, const utility::vector1< utility::vector1< Real > > &B, utility::vector1< utility::vector1< Real > > &C)
void triaxialCoefficients(const utility::vector1< Real > &vb, const utility::vector1< Real > &xi, const utility::vector1< Real > &eta, const utility::vector1< Real > &delta, const utility::vector1< Real > &theta, const utility::vector1< int > &order, utility::vector1< utility::vector1< Real > > &A, utility::vector1< utility::vector1< Real > > &B, utility::vector1< utility::vector1< Real > > &C, utility::vector1< utility::vector1< Real > > &D, utility::vector1< Real > &cal, utility::vector1< Real > &sal, int &f)
Real eucDistance(const utility::vector1< Real > &a, const utility::vector1< Real > &b)
void chainParams(const int &n, const utility::vector1< utility::vector1< Real > > &atoms, Real &vbond, Real &xi, Real &eta, Real &delta, utility::vector1< Real > &R0, utility::vector1< utility::vector1< Real > > &Q)
void rotateZ(const utility::vector1< utility::vector1< Real > > &R, const Real &c, const Real &s, utility::vector1< utility::vector1< Real > > &Rz)
Real bondangle(const utility::vector1< Real > &a, const utility::vector1< Real > &b, const utility::vector1< Real > &c)
void triangle(const utility::vector1< Real > &vbond, utility::vector1< Real > &calpha, utility::vector1< Real > &salpha)
char space()
Space Character.
void rotateY(const utility::vector1< utility::vector1< Real > > &R, const Real &c, const Real &s, utility::vector1< utility::vector1< Real > > &Ry)
Real scpn(const utility::vector1< Real > &a, const utility::vector1< Real > &b, const utility::vector1< Real > &c)
void printMatrix(const utility::vector1< utility::vector1< Real > > &M)
prints the matrix
void test_bridgeObjects()
void chainXYZ(const int &n, const utility::vector1< Real > &b_len1, const utility::vector1< Real > &b_ang1, const utility::vector1< Real > &t_ang1, const bool space, const utility::vector1< Real > &R0, const utility::vector1< utility::vector1< Real > > &Q, utility::vector1< utility::vector1< Real > > &atoms)
void sincos(const utility::vector1< Real > &theta, const int flag, utility::vector1< Real > &cosine, utility::vector1< Real > &sine)
T abs(T const &x)
std::abs( x ) == | x |
Header file for dixon code for ALC.
rosetta project type declarations. Should be kept updated with core/types.hh. This exists because num...
void dixon_eig(PseudoMatrix const &A, PseudoMatrix const &B, PseudoMatrix const &C, PseudoMatrix const &D, vector1< int > const &, PseudoMatrix &cos, PseudoMatrix &sin, PseudoMatrix &u, int &num_solutions)
void test_triaxialCoefficients()
void multMatrix(const utility::vector1< utility::vector1< Real > > &A, const utility::vector1< utility::vector1< Real > > &B, utility::vector1< utility::vector1< Real > > &C)
DimensionExpressionPow pow(Dimension const &dim1, Dimension const &dim2)
pow( Dimension, Dimension )
ocstream cout(std::cout)
Wrapper around std::cout.
vector1: std::vector with 1-based indexing
void printVector(const utility::vector1< Real > &V)
helper functions ///
void cross(const utility::vector1< Real > &L, const utility::vector1< Real > &r0, utility::vector1< Real > &r)
Real torsion(const utility::vector1< Real > &a, const utility::vector1< Real > &b, const utility::vector1< Real > &c, const utility::vector1< Real > &d)
void chainTORS(const int &n, const utility::vector1< utility::vector1< Real > > &atoms, utility::vector1< Real > &t_ang, utility::vector1< Real > &b_ang, utility::vector1< Real > &b_len, utility::vector1< Real > &R0, utility::vector1< utility::vector1< Real > > &Q)
void frame(const utility::vector1< utility::vector1< Real > > &R, utility::vector1< utility::vector1< Real > > &U)
Header file for kinematic_closure_helpers.cc.
void bridgeObjects(const utility::vector1< utility::vector1< Real > > &atoms, const utility::vector1< Real > &dt, const utility::vector1< Real > &da, const utility::vector1< Real > &db, const utility::vector1< int > &pivots, const utility::vector1< int > &order, utility::vector1< utility::vector1< Real > > &t_ang, utility::vector1< utility::vector1< Real > > &b_ang, utility::vector1< utility::vector1< Real > > &b_len, int &nsol)
Solve the triaxial loop closure problem for a system of atoms.
void dixon_sturm(const utility::vector1< utility::vector1< Real > > &A, const utility::vector1< utility::vector1< Real > > &B, const utility::vector1< utility::vector1< Real > > &C, const utility::vector1< utility::vector1< Real > > &D, const utility::vector1< int > &order, utility::vector1< utility::vector1< Real > > &cos, utility::vector1< utility::vector1< Real > > &sin, utility::vector1< utility::vector1< Real > > &tau, int &nsol)
void rotateX(const utility::vector1< utility::vector1< Real > > &R, const Real &c, const Real &s, utility::vector1< utility::vector1< Real > > &Rx)