20 #include <basic/Tracer.hh>
22 #include <utility/vector1.hh>
23 #include <utility/io/ozstream.hh>
24 #include <utility/tools/make_vector.hh>
25 #include <utility/json_spirit/json_spirit_value.h>
27 #include <numeric/xyz.json.hh>
33 namespace scoring_grid {
35 static basic::Tracer
GridBaseTracer(
"protocols.qsar.scoring_grid.SingleGrid");
57 center.x() - grid_halfwidth,
58 center.y() - grid_halfwidth,
59 center.z() - grid_halfwidth
68 using utility::json_spirit::Value;
69 using utility::json_spirit::Pair;
71 Pair type_record(
"type",Value(
type_));
72 Pair center_record(
"center",numeric::serialize(
center_));
73 Pair chain_record(
"chain",Value(
chain_));
76 return Value(utility::tools::make_vector(type_record,center_record,chain_record,grid_record));
84 type_ = data[
"type"].get_str();
85 center_ = numeric::deserialize<core::Real>(data[
"center"].get_array());
178 for(
core::Size atom_index = 1; atom_index <= residue.
nheavyatoms() && score < max_score;++atom_index)
215 std::list<std::pair<core::Vector, core::Real> >
221 std::list<std::pair<core::Vector, core::Real> > point_list;
226 for(
int x_index =0; x_index < x_size; x_index+= stride)
228 for(
int y_index = 0; y_index < y_size; y_index += stride)
230 for(
int z_index = 0; z_index < z_size; z_index+= stride)
236 if(value >= lower_bound && value <= upper_bound)
238 std::pair<core::Vector,core::Real> data(pdb_coords,value);
239 point_list.push_back(data);
253 for(
int x_index =0; x_index < x_size;x_index +=stride)
255 for(
int y_index = 0; y_index < y_size; y_index += stride)
257 for(
int z_index = 0; z_index < z_size; z_index += stride)
262 if(min_val <= value && value <= max_val)
264 out <<
'{' << x_index <<
' ' << y_index <<
' ' << z_index <<
"}U "
265 << box_counter.x() <<
' ' << box_counter.y() <<
' ' << box_counter.z() <<
'\n';
278 if(!
grid_.
is_in_grid(atom_coords.x(), atom_coords.y(), atom_coords.z()))
307 core::Real inner_radius2 = inner_radius*inner_radius;
308 core::Real outer_radius2 = outer_radius*outer_radius;
319 for(
int x_index = std::max(0,grid_min.x()); x_index <= std::min(x_count-1,grid_max.x());++x_index)
321 for(
int y_index = std::max(0,grid_min.y());y_index <= std::min(y_count-1,grid_max.y());++y_index)
323 for(
int z_index = std::max(0,grid_min.z()); z_index <= std::min(z_count-1,grid_max.z());++z_index)
329 box_center.distance_squared(coords) >= inner_radius2
330 && box_center.distance_squared(coords) <= outer_radius2
351 for(
int x_index = std::max(0,grid_min.x()); x_index <= std::min(x_count-1,grid_max.x());++x_index)
353 for(
int y_index = std::max(0,grid_min.y());y_index <= std::min(y_count-1,grid_max.y());++y_index)
355 for(
int z_index = std::max(0,grid_min.z()); z_index <= std::min(z_count-1,grid_max.z());++z_index)
359 core::Real distance2 = box_center.distance_squared(coords);
360 if(distance2 <= cutoff2)
364 if(distance - atom_shell <= current_value)
385 for(
int x_index = std::max(0,grid_min.x()); x_index <= std::min(x_count-1,grid_max.x());++x_index)
387 for(
int y_index = std::max(0,grid_min.y());y_index <= std::min(y_count-1,grid_max.y());++y_index)
389 for(
int z_index = std::max(0,grid_min.z()); z_index <= std::min(z_count-1,grid_max.z());++z_index)
393 core::Real distance2 = box_center.distance_squared(coords);
394 if(distance2 <= cutoff2)
401 lj_spline->interpolate(distance,spline_score,spline_score_deriv);
402 if(spline_score <= current_value)
418 core::Real half_width_squared = half_width*half_width;
426 for(
int x_index = std::max(0,grid_min.x()); x_index <= std::min(x_count-1,grid_max.x());++x_index)
428 for(
int y_index = std::max(0,grid_min.y());y_index <= std::min(y_count-1,grid_max.y());++y_index)
430 for(
int z_index = std::max(0,grid_min.z()); z_index <= std::min(z_count-1,grid_max.z());++z_index)
439 if((distance_squared >radius_squared-half_width_squared && distance_squared < radius_squared)|| (distance_squared <radius_squared+half_width_squared && distance_squared > radius_squared))
448 if(distance_squared < radius_squared)
450 distance_from_ring = (radius_squared-half_width_squared)-distance_squared;
453 distance_from_ring = distance_squared-(radius_squared+half_width_squared);
456 if(distance_from_ring <= std::abs(magnitude))