25 #include <basic/Tracer.hh>
33 #include <apbs/routines.h>
34 #include <apbs_driver.h>
37 static basic::Tracer
TR(
"core/scoring/APBSWrapper");
47 std::map<std::string, bool>
const & charged_residues,
53 pqr =
new PQR(pose, natoms, charged_residues);
54 TR <<
"PQR data is prepared." << std::endl;
56 TR <<
"APBS config is prepared." << std::endl;
59 config->i_param.calcenergy,
61 config->i_param.write_charge,
62 config->i_param.write_smol,
63 config->i_param.write_kappa,
64 config->i_param.write_diel,
65 config->i_param.write_atompot);
66 TR <<
"APBS result data structure is prepared." << std::endl;
71 const int nwrites =
result->nwrites;
75 std::vector< double * > raw_grid_data;
76 for(
int i=0; i<nwrites; i++ ) {
77 raw_grid_data.push_back(
result->grid_data[i].data());
80 ret = apbsdrv_(&
pqr->natoms_,
86 config->r_param.raw_array(),
87 config->i_param.raw_array(),
120 raw_grid_data.data() );
133 for (
int i=1; i<= nres; ++i ) {
135 for (
Size j=1; j<= rsd->natoms(); ++j ) {
136 if ( rsd->atom_type(j).is_virtual() )
continue;
144 std::map<std::string, bool>
const & charged_residues)
150 for (
int i=1; i<= nres; ++i ) {
152 bool residue_charged =
const_cast<std::map<std::string,bool>&
>(charged_residues)[rsd->type().name()];
153 for (
Size j=1; j<=rsd->natoms(); ++j ) {
159 if ( rsd->atom_type(j).is_virtual() )
continue;
161 runtime_assert( rsd->chain() <
chains.size() );
163 x.push_back(atom.xyz()(1));
164 y.push_back(atom.xyz()(2));
165 z.push_back(atom.xyz()(3));
167 radius.push_back(rsd->atom_type(j).lj_radius());
175 int calcforce,
int calcenergy,
176 int write_pot,
int write_charge,
int write_smol,
177 int write_kappa,
int write_diel,
int write_atompot )
184 for(
int i=0; i<natoms; i++ ) {
205 for(
int i=1; i<13; i++)
grid_meta[i] = 0.;
208 std::vector<double> i_data( grid_dimes[0] * grid_dimes[1] * grid_dimes[2], 0.);
217 grid_centering_mode(0),
218 coarse_centering_mode(0),
219 fine_centering_mode(0),
248 array[2] = grid_centering_mode;
249 array[3] = coarse_centering_mode;
250 array[4] = fine_centering_mode;
255 array[9] = calcforce;
257 array[11] = write_pot;
258 array[12] = write_charge;
259 array[13] = write_smol;
260 array[14] = write_kappa;
261 array[15] = write_diel;
262 array[16] = write_atompot;
264 array[18] = iparam19;
265 array[19] = apol_calcforce;
266 array[20] = apol_calcenergy;
268 array[22] = use_charge;
269 array[23] = use_kappa;
270 array[24] = use_diel;
295 array[7] = smpbe_vol;
296 array[8] = smpbe_size;
316 double min_r[] = {9999,9999,9999};
317 double max_r[] = {-9999,-9999,-9999};
321 for (
int i=0; i<3; ++i) {
322 min_r[i] = std::min(pose.
residue(ires).
xyz(iatom)[i], min_r[i]);
323 max_r[i] = std::max(pose.
residue(ires).
xyz(iatom)[i], max_r[i]);
329 for(
int i=0; i<3; i++ ) {
330 length[i] = max_r[i]- min_r[i];
331 ccenter[i] = (min_r[i] + max_r[i])/2.;