aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sci-chemistry/ambertools/files/ambertools-15-update.3.patch')
-rw-r--r--sci-chemistry/ambertools/files/ambertools-15-update.3.patch95
1 files changed, 95 insertions, 0 deletions
diff --git a/sci-chemistry/ambertools/files/ambertools-15-update.3.patch b/sci-chemistry/ambertools/files/ambertools-15-update.3.patch
new file mode 100644
index 000000000..a892ecefd
--- /dev/null
+++ b/sci-chemistry/ambertools/files/ambertools-15-update.3.patch
@@ -0,0 +1,95 @@
+********> update.3
+ Author: Istvan Kolossvary
+ Date: 15 June 2015
+
+ Programs: nab, sff
+
+ Description: Fix problem with lmod docking when fixed atoms are present
+
+ ---------------------------------------------------------------------------
+
+diff --git AmberTools/src/sff/lmodC.c AmberTools/src/sff/lmodC.c
+index 8a19dd8..45c8244 100644
+--- AmberTools/src/sff/lmodC.c
++++ AmberTools/src/sff/lmodC.c
+@@ -864,7 +864,7 @@ trans_ligand(double *xyz, int start, int end, double dx, double dy,
+ double dz)
+ {
+ int i, x, y, z;
+- for (i = start - 1; i < end; i++) {
++ for (i = start; i <= end; i++) {
+ x = 3 * i;
+ y = x + 1;
+ z = y + 1;
+@@ -900,7 +900,7 @@ rot_ligand(double *xyz, int start, int end, double cent_x, double cent_y,
+ {
+ int i, x, y, z;
+ double temp_x, temp_y, temp_z;
+- for (i = start - 1; i < end; i++) {
++ for (i = start; i <= end; i++) {
+ x = 3 * i;
+ y = x + 1;
+ z = y + 1;
+@@ -930,7 +930,7 @@ calc_centroid(double *xyz, int start, int end, double *cent_x,
+ {
+ int i, x, y, z, n;
+ *cent_x = *cent_y = *cent_z = ZERO;
+- for (i = start - 1; i < end; i++) {
++ for (i = start; i <= end; i++) {
+ x = 3 * i;
+ y = x + 1;
+ z = y + 1;
+@@ -1591,6 +1591,7 @@ lmodC(int *nlmodit, int *nmod, int *kmod, int *rotran, int *natm_ext,
+ i, j, k, kk, l, n, cnt;
+ static int barrier_crossing_test_on, do_all, do_ligs;
+ static int *index = NULL;
++ static int ikk, lig_start_kk, lig_end_kk, lig_rot_cent_kk;
+ static double ref_energy, energy, energy_old, min_energy,
+ glob_min_energy, rad, sum, max_atmov, scale, lmod_step, rms,
+ rms_old, grad_rms;
+@@ -2554,7 +2555,19 @@ lmodC(int *nlmodit, int *nmod, int *kmod, int *rotran, int *natm_ext,
+ xtrans *= trscale / trnorm;
+ ytrans *= trscale / trnorm;
+ ztrans *= trscale / trnorm;
+- trans_ligand(xyz_local, lig_start[kk], lig_end[kk], xtrans,
++ for (ikk = 0; ikk < natm_local; ikk++ ) {
++ if ( atm_indx[ikk] == (lig_start[kk] -1) ) { /* lig_start[] contains external PDB atom numbers */
++ lig_start_kk = ikk;
++ break;
++ }
++ }
++ for (ikk = 0; ikk < natm_local; ikk++ ) {
++ if ( atm_indx[ikk] == (lig_end[kk] -1) ) { /* lig_end[] contains external PDB atom numbers */
++ lig_end_kk = ikk;
++ break;
++ }
++ }
++ trans_ligand(xyz_local, lig_start_kk, lig_end_kk, xtrans,
+ ytrans, ztrans);
+ do {
+ xrot = 2 * rand2() - 1;
+@@ -2568,13 +2581,19 @@ lmodC(int *nlmodit, int *nmod, int *kmod, int *rotran, int *natm_ext,
+ rotang = angmin[kk] + (angmax[kk] - angmin[kk]) * rand2();
+ calc_rot_matrix(DEG2RAD * rotang, xrot, yrot, zrot, rotmat);
+ if (lig_rot_cent[kk]) {
+- xcent = xyz_local[(lig_rot_cent[kk] - 1) * 3 ];
+- ycent = xyz_local[(lig_rot_cent[kk] - 1) * 3 + 1];
+- zcent = xyz_local[(lig_rot_cent[kk] - 1) * 3 + 2];
++ for (ikk = 0; ikk < natm_local; ikk++ ) {
++ if ( atm_indx[ikk] == (lig_rot_cent[kk] -1) ) { /* lig_rot_cent[] contains external PDB atom numbers */
++ lig_rot_cent_kk = ikk;
++ break;
++ }
++ }
++ xcent = xyz_local[ lig_rot_cent_kk * 3 ];
++ ycent = xyz_local[ lig_rot_cent_kk * 3 + 1];
++ zcent = xyz_local[ lig_rot_cent_kk * 3 + 2];
+ } else
+- calc_centroid(xyz_local, lig_start[kk], lig_end[kk],
++ calc_centroid(xyz_local, lig_start_kk, lig_end_kk,
+ &xcent, &ycent, &zcent);
+- rot_ligand(xyz_local, lig_start[kk], lig_end[kk], xcent,
++ rot_ligand(xyz_local, lig_start_kk, lig_end_kk, xcent,
+ ycent, zcent, rotmat);
+ }
+ /* close pair separation operates on xyz_ext[]: */