@@ -28,7 +28,7 @@ static PyObject * cpydock_calculate_energy(PyObject *self, PyObject *args) {
28
28
PyArrayObject * rec_charges , * lig_charges , * rec_vdw , * lig_vdw , * rec_vdw_radii , * lig_vdw_radii = NULL ;
29
29
PyArrayObject * rec_hydrogens , * lig_hydrogens , * rec_asa , * lig_asa , * rec_des_energy , * lig_des_energy = NULL ;
30
30
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 ;
32
32
double * * rec_array , * * lig_array , x , y , z , distance2 , interface_cutoff ;
33
33
npy_intp dims [2 ];
34
34
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) {
44
44
total_solvation_lig = 0.0 ;
45
45
interface_cutoff = 3.9 ;
46
46
interface_len = 0 ;
47
+ intf_array_size = 1 ;
47
48
48
49
if (PyArg_ParseTuple (args , "OOOOOOOOOOOOOO|d" ,
49
50
& receptor_coordinates , & ligand_coordinates , & rec_charges , & lig_charges ,
@@ -80,8 +81,10 @@ static PyObject * cpydock_calculate_energy(PyObject *self, PyObject *args) {
80
81
// Structures to store the atom at minimal distance of a given atom
81
82
min_rec_distance = malloc (rec_len * sizeof (double ));
82
83
min_lig_distance = malloc (lig_len * sizeof (double ));
84
+
83
85
interface_receptor = malloc (lig_len * sizeof (unsigned int ));
84
86
interface_ligand = malloc (lig_len * sizeof (unsigned int ));
87
+
85
88
for (i = 0 ; i < rec_len ; i ++ ) min_rec_distance [i ] = HUGE_DISTANCE ;
86
89
for (j = 0 ; j < lig_len ; j ++ ) min_lig_distance [j ] = HUGE_DISTANCE ;
87
90
@@ -126,9 +129,10 @@ static PyObject * cpydock_calculate_energy(PyObject *self, PyObject *args) {
126
129
127
130
}
128
131
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 ));
132
136
}
133
137
}
134
138
// Convert total electrostatics to Kcal/mol:
0 commit comments