42 #include <ObjexxFCL/format.hh>
43 #include <ObjexxFCL/string.functions.hh>
51 #include <basic/Tracer.hh>
53 #include <numeric/conversions.hh>
54 #include <numeric/xyz.functions.hh>
70 static basic::Tracer
TR(
"core.scoring.methods.LK_BallInfo" );
74 using namespace chemical;
76 using namespace conformation;
101 xyz_local_( kinematics::
Stub( rsd.
xyz( atom1 ), rsd.
xyz( atom2 ), rsd.
xyz( atom3 ) ).global2local( water ) )
132 using numeric::conversions::radians;
133 using namespace chemical;
144 ( acc_atm_name ==
" O1P" || acc_atm_name ==
" O2P" ) ) {
146 b1_xyz = acc_rsd.
xyz(
"P" );
147 b2_xyz = ( ( acc_atm_name ==
" O1P" ) ? acc_rsd.
xyz(
"O2P" ) : acc_rsd.
xyz(
"O1P" ) );
150 theta = 180.0 - 125.0;
151 phi_list.push_back( 45.0 );
152 phi_list.push_back( 160.0 );
153 phi_list.push_back( 280.0 );
158 theta = 180.0 - 120.0;
159 phi_list.push_back( 0.0 );
160 phi_list.push_back( 180.0 );
163 theta = 180.0 - 109.0;
164 phi_list.push_back( 120.0 );
165 phi_list.push_back( 240.0 );
168 b1_xyz = 0.5 * ( b1_xyz + b2_xyz );
170 phi_list.push_back( 0.0 );
173 TR.Error <<
"Bad hybridization type for acceptor " << hybrid << std::endl;
180 for (
Size i=1; i<= phi_list.size(); ++i ) {
181 waters.push_back( stub.
spherical( radians( phi_list[i] ), radians( theta ), distance ) );
188 bool const sidechain_only,
192 using namespace conformation;
193 using namespace chemical;
197 bool const dump_waters_pdb(
false );
201 rsd_water_builders.clear();
202 rsd_water_builders.resize( rsd_type.
natoms() );
207 for ( chemical::AtomIndices::const_iterator
208 hnum = rsd->Hpos_polar().begin(),
209 hnume = rsd->Hpos_polar().end(); hnum != hnume; ++hnum ) {
210 Size const hatm( *hnum );
213 Size const datm( rsd->atom_base( hatm ) );
214 Size const datm_base( rsd->atom_base( datm ) );
217 rsd_water_builders[ datm ].push_back(
WaterBuilder( water, *rsd, hatm, datm, datm_base ) );
218 TR.Trace <<
"adding ideal water to rsd_type= " << rsd_type.
name() <<
" anchored to atom " <<
219 rsd_type.
atom_name( datm ) <<
" datm_base= " << rsd_type.
atom_name( datm_base ) << std::endl;
220 all_waters.push_back( water );
224 for ( chemical::AtomIndices::const_iterator
225 anum = rsd->accpt_pos().begin(),
226 anume = rsd->accpt_pos().end(); anum != anume; ++anum ) {
227 Size const aatm( *anum );
237 Size const abase1( rsd->atom_base( aatm ) ), abase2( rsd->abase2( aatm ) );
240 rsd->xyz( aatm ), rsd->xyz( abase1 ), rsd->xyz( abase2 ),
241 rsd->atom_type( aatm ).hybridization() ) );
242 for (
Size i=1; i<= waters.size(); ++i ) {
243 rsd_water_builders[ aatm ].push_back(
WaterBuilder( waters[i], *rsd, aatm, abase1, abase2 ) );
244 TR.Trace <<
"adding ideal water to rsd_type= " << rsd_type.
name() <<
" anchored to atom " <<
246 " abase2= " << rsd_type.
atom_name( abase2 ) << std::endl;
247 all_waters.push_back( waters[i] );
251 if ( dump_waters_pdb && !all_waters.empty() ) {
252 std::ofstream out(
std::string( rsd->name() +
"_waters.pdb" ).c_str() );
253 Size atom_number( 0 );
259 char const chain =
'A';
260 for (
Size i=1; i<= all_waters.size(); ++i ) {
261 using namespace ObjexxFCL::fmt;
263 std::string const atom_name(
"W" + ObjexxFCL::lead_zero_string_of( i, 3 ) );
264 out <<
"ATOM " << I(5,atom_number) <<
' ' << atom_name <<
' ' <<
265 rsd->name3() <<
' ' << chain << I(4,rsd->seqpos() ) <<
" " <<
266 F(8,3,all_waters[i](1)) <<
267 F(8,3,all_waters[i](2)) <<
268 F(8,3,all_waters[i](3)) <<
269 F(6,2,1.0) << F(6,2,0.0) <<
'\n';
289 using namespace conformation;
290 using namespace chemical;
294 TR.Trace <<
"initialize_residue_type: " << rsd_type.
name() << std::endl;
296 bool const sidechain_only(
true );
299 assert( ! water_builder_map_.count( address ) );
301 water_builder_map_[ address ];
311 waters_.clear(); waters_.resize( rsd.
nheavyatoms() );
318 WaterBuilderMap::const_iterator it( water_builder_map_.find( address ) );
319 if ( it == water_builder_map_.end() ) {
320 initialize_residue_type( rsd.
type() );
321 it = water_builder_map_.find( address );
326 for ( WaterBuilders::const_iterator water= water_builders.begin(), water_e = water_builders.end();
327 water != water_e; ++water ) {
328 waters_[i].push_back( water->build( rsd ) );
336 waters_( src.waters_ ),
337 has_waters_( src.has_waters_ )
351 for (
Size i=1; i<= src.
size(); ++i ) {
356 basic::datacache::CacheableDataOP