26 #include <utility/io/izstream.hh>
27 #include <utility/string_util.hh>
30 #include <ObjexxFCL/string.functions.hh>
32 #include <utility/vector1.hh>
37 namespace downstream {
39 using namespace ObjexxFCL;
47 reset_grid_bb_( false )
52 utility::pointer::ReferenceCount(),
53 bin_width_( other.bin_width_ ),
56 reset_grid_bb_( other.reset_grid_bb_ )
63 if (
this != & rhs ) {
76 utility::io::izstream istr( filename.c_str() );
79 utility_exit_with_message(
"Gridlig file " + fname +
" not found" );
83 istr >> name >> liggrid;
84 runtime_assert( name ==
"NAME:" );
85 runtime_assert( liggrid ==
"gridlig" );
87 Real xbase( 0.0 ), ybase( 0.0 ), zbase( 0.0 );
89 runtime_assert( base ==
"BASE:" );
90 istr >> xbase; runtime_assert( ! istr.bad() );
91 istr >> ybase; runtime_assert( ! istr.bad() );
92 istr >> zbase; runtime_assert( ! istr.bad() );
96 runtime_assert( size ==
"SIZE:" );
97 Size xsize( 0 ), ysize( 0 ), zsize( 0 );
98 istr >> xsize; runtime_assert( ! istr.bad() );
99 istr >> ysize; runtime_assert( ! istr.bad() );
100 istr >> zsize; runtime_assert( ! istr.bad() );
102 runtime_assert( xsize != 0 );
103 runtime_assert( ysize != 0 );
104 runtime_assert( zsize != 0 );
108 runtime_assert( length ==
"LENGTH:");
109 Real xwidth( 0.0 ), ywidth( 0.0 ), zwidth( 0.0 );
111 istr >> xwidth; runtime_assert( ! istr.bad() );
112 istr >> ywidth; runtime_assert( ! istr.bad() );
113 istr >> zwidth; runtime_assert( ! istr.bad() );
115 runtime_assert( xwidth != 0 );
116 runtime_assert( ywidth != 0 );
117 runtime_assert( zwidth != 0 );
120 runtime_assert( xwidth == ywidth );
121 runtime_assert( xwidth == zwidth );
123 Vector lower_corner( xbase, ybase, zbase );
124 Vector upper_corner( lower_corner );
125 upper_corner.x() += xwidth * xsize;
126 upper_corner.y() += ywidth * ysize;
127 upper_corner.z() += zwidth * zsize;
137 numeric::geometry::hashing::Bin3D bin; bin[ 1 ] = 0; bin[ 2 ] = 0; bin[ 3 ] = 0;
139 std::istringstream line_stream;
151 if (is_blank(line)) {
159 line_stream.str(line);
160 line_stream.seekg( std::ios::beg );
162 if ( bin[ 1 ] >= xsize ) {
163 utility_exit_with_message(
"Expected active site definition to end at line " + utility::to_string( linenumber ) +
". X dim is out of range" );
166 if ( bin[ 2 ] >= ysize ) {
167 utility_exit_with_message(
"Expected blank line to separate y/z slices at line " + utility::to_string( linenumber ) +
". Y dim is out of range" );
170 for ( bin[ 3 ] = 0; bin[ 3 ] < zsize; ++bin[ 3 ] ) {
172 if ( line_stream.bad() ) {
173 std::cerr <<
"ERROR: liggrid file " << filename <<
" near line " << linenumber << std::endl;
174 std::cerr <<
"ERROR: Expected to read " << zsize <<
" entries, but found only " << bin[ 3 ] <<
" entries" << std::endl;
175 utility_exit_with_message(
"Could not read active-site gridlig definition file" );
178 grid_->set_value_for_bin( bin,
true );
213 return grid_->occupied( p );
231 Vector lower( res.
xyz( 1 )), upper( lower );
233 lower.min( res.
xyz( ii ) );
234 upper.max( res.
xyz( ii ) );
249 lower.min( res.
xyz( ii ) );
250 upper.max( res.
xyz( ii ) );
263 Vector lower( res.
xyz( 1 )), upper( lower );
265 lower.min( res.
xyz( ii ) );
266 upper.max( res.
xyz( ii ) );
279 grid_->or_by_sphere_liberal( res.
xyz( ii ), radius );
291 grid_->or_by_sphere_liberal( res.
xyz( ii ), radius );
305 grid_->or_by_sphere_liberal( res.
xyz( ii ), radius );
325 for (
Size ii = 1; ii <= 3; ++ii ) {
326 if ( lower( ii ) <
bb_.lower()( ii ) ) {
327 lower.min(
bb_.lower() );
328 bb_.set_lower( lower );
333 for (
Size ii = 1; ii <= 3; ++ii ) {
334 if ( upper( ii ) >
bb_.upper()( ii ) ) {
335 upper.max(
bb_.upper() );
336 bb_.set_upper( upper );
351 for (
Size ii = 1; ii <= 3; ++ii ) {
353 snapped_lower( ii ) =
static_cast< Real > (
static_cast< int > ( snapped_lower( ii ) ));
355 bb_.set_lower( snapped_lower );