Skip to content

Commit de7317e

Browse files
committed
Fixed realloc in cpydock scoring function
1 parent f9ce688 commit de7317e

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

lightdock/scoring/cpydock/energy/c/cpydock.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ static PyObject * cpydock_calculate_energy(PyObject *self, PyObject *args) {
2828
PyArrayObject *rec_charges, *lig_charges, *rec_vdw, *lig_vdw, *rec_vdw_radii, *lig_vdw_radii = NULL;
2929
PyArrayObject *rec_hydrogens, *lig_hydrogens, *rec_asa, *lig_asa, *rec_des_energy, *lig_des_energy = NULL;
3030
double atom_elec, total_elec, total_vdw, total_solvation_rec, total_solvation_lig, vdw_energy, vdw_radius, p6, k, solv_rec, solv_lig;
31-
unsigned int rec_len, lig_len, i, j, interface_len, *interface_receptor, *interface_ligand;
31+
unsigned int rec_len, lig_len, i, j, interface_len, intf_array_size, *interface_receptor, *interface_ligand;
3232
double **rec_array, **lig_array, x, y, z, distance2, interface_cutoff;
3333
npy_intp dims[2];
3434
double *rec_c_charges, *lig_c_charges, *rec_c_vdw, *lig_c_vdw, *rec_c_vdw_radii, *lig_c_vdw_radii = NULL;
@@ -44,6 +44,7 @@ static PyObject * cpydock_calculate_energy(PyObject *self, PyObject *args) {
4444
total_solvation_lig = 0.0;
4545
interface_cutoff = 3.9;
4646
interface_len = 0;
47+
intf_array_size = 1;
4748

4849
if (PyArg_ParseTuple(args, "OOOOOOOOOOOOOO|d",
4950
&receptor_coordinates, &ligand_coordinates, &rec_charges, &lig_charges,
@@ -80,8 +81,10 @@ static PyObject * cpydock_calculate_energy(PyObject *self, PyObject *args) {
8081
// Structures to store the atom at minimal distance of a given atom
8182
min_rec_distance = malloc(rec_len*sizeof(double));
8283
min_lig_distance = malloc(lig_len*sizeof(double));
84+
8385
interface_receptor = malloc(lig_len*sizeof(unsigned int));
8486
interface_ligand = malloc(lig_len*sizeof(unsigned int));
87+
8588
for (i = 0; i < rec_len; i++) min_rec_distance[i] = HUGE_DISTANCE;
8689
for (j = 0; j < lig_len; j++) min_lig_distance[j] = HUGE_DISTANCE;
8790

@@ -126,9 +129,10 @@ static PyObject * cpydock_calculate_energy(PyObject *self, PyObject *args) {
126129

127130
}
128131

129-
if (!(interface_len%lig_len)) {
130-
interface_receptor = realloc(interface_receptor, (interface_len/lig_len + 1)*lig_len*sizeof(unsigned int));
131-
interface_ligand = realloc(interface_ligand, (interface_len/lig_len + 1)*lig_len*sizeof(unsigned int));
132+
if (((interface_len + lig_len - 1)/lig_len + 1) > intf_array_size) {
133+
intf_array_size++;
134+
interface_receptor = realloc(interface_receptor, intf_array_size*lig_len*sizeof(unsigned int));
135+
interface_ligand = realloc(interface_ligand, intf_array_size*lig_len*sizeof(unsigned int));
132136
}
133137
}
134138
// Convert total electrostatics to Kcal/mol:

0 commit comments

Comments
 (0)