15 #ifndef INCLUDED_core_scoring_NeighborList_tmpl_hh
16 #define INCLUDED_core_scoring_NeighborList_tmpl_hh
31 #include <basic/prof.hh>
36 #include <platform/types.hh>
157 #include <utility/Bound.fwd.hh>
158 #include <utility/Bound.hh>
159 #include <utility/down_cast.hh>
160 #include <utility/exit.hh>
161 #include <utility/stream_util.hh>
162 #include <utility/string_util.hh>
163 #include <utility/vector0_bool.hh>
164 #include <utility/vector1.fwd.hh>
165 #include <utility/vector1.hh>
166 #include <utility/vector1_bool.hh>
167 #include <utility/vectorL.fwd.hh>
168 #include <utility/vectorL.hh>
169 #include <utility/vectorL_Selector.hh>
170 #include <utility/vectorL_bool.hh>
171 #include <utility/file/FileName.fwd.hh>
172 #include <utility/file/FileName.hh>
173 #include <utility/file/PathName.fwd.hh>
174 #include <utility/file/PathName.hh>
175 #include <utility/keys/AutoKey.fwd.hh>
176 #include <utility/keys/AutoKey.hh>
177 #include <utility/keys/Key.fwd.hh>
178 #include <utility/keys/Key.hh>
179 #include <utility/keys/Key2Tuple.fwd.hh>
180 #include <utility/keys/Key2Tuple.hh>
181 #include <utility/keys/Key3Tuple.fwd.hh>
182 #include <utility/keys/Key3Tuple.hh>
183 #include <utility/keys/Key4Tuple.fwd.hh>
184 #include <utility/keys/Key4Tuple.hh>
185 #include <utility/keys/KeyLess.fwd.hh>
186 #include <utility/keys/KeyLookup.fwd.hh>
187 #include <utility/keys/KeyLookup.hh>
188 #include <utility/keys/NoClient.fwd.hh>
189 #include <utility/keys/NoClient.hh>
190 #include <utility/keys/SmallKeyVector.fwd.hh>
191 #include <utility/keys/SmallKeyVector.hh>
192 #include <utility/keys/UserKey.fwd.hh>
193 #include <utility/keys/VariantKey.fwd.hh>
194 #include <utility/keys/VariantKey.hh>
195 #include <utility/options/AnyOption.fwd.hh>
196 #include <utility/options/AnyOption.hh>
197 #include <utility/options/AnyVectorOption.fwd.hh>
198 #include <utility/options/AnyVectorOption.hh>
199 #include <utility/options/BooleanOption.fwd.hh>
200 #include <utility/options/BooleanOption.hh>
201 #include <utility/options/BooleanVectorOption.fwd.hh>
202 #include <utility/options/BooleanVectorOption.hh>
203 #include <utility/options/FileOption.fwd.hh>
204 #include <utility/options/FileOption.hh>
205 #include <utility/options/FileVectorOption.fwd.hh>
206 #include <utility/options/FileVectorOption.hh>
207 #include <utility/options/IntegerOption.fwd.hh>
208 #include <utility/options/IntegerOption.hh>
209 #include <utility/options/IntegerVectorOption.fwd.hh>
210 #include <utility/options/IntegerVectorOption.hh>
211 #include <utility/options/Option.fwd.hh>
212 #include <utility/options/Option.hh>
213 #include <utility/options/OptionCollection.fwd.hh>
214 #include <utility/options/OptionCollection.hh>
215 #include <utility/options/PathOption.fwd.hh>
216 #include <utility/options/PathOption.hh>
217 #include <utility/options/PathVectorOption.fwd.hh>
218 #include <utility/options/PathVectorOption.hh>
219 #include <utility/options/RealOption.fwd.hh>
220 #include <utility/options/RealOption.hh>
221 #include <utility/options/RealVectorOption.fwd.hh>
222 #include <utility/options/RealVectorOption.hh>
223 #include <utility/options/ScalarOption.fwd.hh>
224 #include <utility/options/ScalarOption.hh>
225 #include <utility/options/ScalarOption_T_.fwd.hh>
226 #include <utility/options/ScalarOption_T_.hh>
227 #include <utility/options/StringOption.fwd.hh>
228 #include <utility/options/StringOption.hh>
229 #include <utility/options/StringVectorOption.fwd.hh>
230 #include <utility/options/StringVectorOption.hh>
231 #include <utility/options/VariantOption.fwd.hh>
232 #include <utility/options/VariantOption.hh>
233 #include <utility/options/VectorOption.fwd.hh>
234 #include <utility/options/VectorOption.hh>
235 #include <utility/options/VectorOption_T_.fwd.hh>
236 #include <utility/options/VectorOption_T_.hh>
237 #include <utility/options/mpi_stderr.hh>
238 #include <utility/options/keys/AnyOptionKey.fwd.hh>
239 #include <utility/options/keys/AnyOptionKey.hh>
240 #include <utility/options/keys/AnyVectorOptionKey.fwd.hh>
241 #include <utility/options/keys/AnyVectorOptionKey.hh>
242 #include <utility/options/keys/BooleanOptionKey.fwd.hh>
243 #include <utility/options/keys/BooleanOptionKey.hh>
244 #include <utility/options/keys/BooleanVectorOptionKey.fwd.hh>
245 #include <utility/options/keys/BooleanVectorOptionKey.hh>
246 #include <utility/options/keys/FileOptionKey.fwd.hh>
247 #include <utility/options/keys/FileOptionKey.hh>
248 #include <utility/options/keys/FileVectorOptionKey.fwd.hh>
249 #include <utility/options/keys/FileVectorOptionKey.hh>
250 #include <utility/options/keys/IntegerOptionKey.fwd.hh>
251 #include <utility/options/keys/IntegerOptionKey.hh>
252 #include <utility/options/keys/IntegerVectorOptionKey.fwd.hh>
253 #include <utility/options/keys/IntegerVectorOptionKey.hh>
254 #include <utility/options/keys/OptionKey.fwd.hh>
255 #include <utility/options/keys/OptionKey.hh>
256 #include <utility/options/keys/OptionKeys.hh>
257 #include <utility/options/keys/PathOptionKey.fwd.hh>
258 #include <utility/options/keys/PathOptionKey.hh>
259 #include <utility/options/keys/PathVectorOptionKey.fwd.hh>
260 #include <utility/options/keys/PathVectorOptionKey.hh>
261 #include <utility/options/keys/RealOptionKey.fwd.hh>
262 #include <utility/options/keys/RealOptionKey.hh>
263 #include <utility/options/keys/RealVectorOptionKey.fwd.hh>
264 #include <utility/options/keys/RealVectorOptionKey.hh>
265 #include <utility/options/keys/ScalarOptionKey.fwd.hh>
266 #include <utility/options/keys/ScalarOptionKey.hh>
267 #include <utility/options/keys/StringOptionKey.fwd.hh>
268 #include <utility/options/keys/StringOptionKey.hh>
269 #include <utility/options/keys/StringVectorOptionKey.fwd.hh>
270 #include <utility/options/keys/StringVectorOptionKey.hh>
271 #include <utility/options/keys/VectorOptionKey.fwd.hh>
272 #include <utility/options/keys/VectorOptionKey.hh>
273 #include <utility/options/keys/all.hh>
274 #include <utility/pointer/ReferenceCount.fwd.hh>
275 #include <utility/pointer/ReferenceCount.hh>
276 #include <utility/pointer/access_ptr.fwd.hh>
277 #include <utility/pointer/access_ptr.hh>
278 #include <utility/pointer/owning_ptr.functions.hh>
279 #include <utility/pointer/owning_ptr.fwd.hh>
280 #include <utility/pointer/owning_ptr.hh>
281 #include <utility/signals/BufferedSignalHub.fwd.hh>
282 #include <utility/signals/BufferedSignalHub.hh>
283 #include <utility/signals/Link.fwd.hh>
284 #include <utility/signals/Link.hh>
285 #include <utility/signals/LinkUnit.fwd.hh>
286 #include <utility/signals/LinkUnit.hh>
287 #include <utility/signals/PausableSignalHub.fwd.hh>
288 #include <utility/signals/PausableSignalHub.hh>
289 #include <utility/signals/SignalHub.fwd.hh>
290 #include <utility/signals/SignalHub.hh>
291 #include <numeric/NumericTraits.hh>
292 #include <numeric/constants.hh>
293 #include <numeric/conversions.hh>
294 #include <numeric/numeric.functions.hh>
295 #include <numeric/sphericalVector.fwd.hh>
296 #include <numeric/sphericalVector.hh>
297 #include <numeric/trig.functions.hh>
298 #include <numeric/types.hh>
299 #include <numeric/xyz.functions.fwd.hh>
300 #include <numeric/xyz.functions.hh>
301 #include <numeric/xyzMatrix.fwd.hh>
302 #include <numeric/xyzMatrix.hh>
303 #include <numeric/xyzTriple.fwd.hh>
304 #include <numeric/xyzTriple.hh>
305 #include <numeric/xyzVector.fwd.hh>
306 #include <numeric/xyzVector.hh>
307 #include <numeric/internal/ColPointers.hh>
308 #include <numeric/internal/ColVectors.hh>
309 #include <numeric/internal/ColsPointer.hh>
310 #include <numeric/internal/RowPointers.hh>
311 #include <numeric/internal/RowVectors.hh>
312 #include <numeric/internal/RowsPointer.hh>
313 #include <ObjexxFCL/Dimension.fwd.hh>
314 #include <ObjexxFCL/Dimension.hh>
315 #include <ObjexxFCL/DimensionExpression.hh>
316 #include <ObjexxFCL/DynamicIndexRange.fwd.hh>
317 #include <ObjexxFCL/DynamicIndexRange.hh>
318 #include <ObjexxFCL/FArray.all.fwd.hh>
319 #include <ObjexxFCL/FArray.fwd.hh>
320 #include <ObjexxFCL/FArray.hh>
321 #include <ObjexxFCL/FArray1.all.fwd.hh>
322 #include <ObjexxFCL/FArray1.fwd.hh>
323 #include <ObjexxFCL/FArray1.hh>
324 #include <ObjexxFCL/FArray1A.fwd.hh>
325 #include <ObjexxFCL/FArray1D.fwd.hh>
326 #include <ObjexxFCL/FArray1D.hh>
327 #include <ObjexxFCL/FArray1P.fwd.hh>
328 #include <ObjexxFCL/FArray2.all.fwd.hh>
329 #include <ObjexxFCL/FArray2.fwd.hh>
330 #include <ObjexxFCL/FArray2.hh>
331 #include <ObjexxFCL/FArray2A.fwd.hh>
332 #include <ObjexxFCL/FArray2D.fwd.hh>
333 #include <ObjexxFCL/FArray2D.hh>
334 #include <ObjexxFCL/FArray2P.fwd.hh>
335 #include <ObjexxFCL/FArray3.all.fwd.hh>
336 #include <ObjexxFCL/FArray3.fwd.hh>
337 #include <ObjexxFCL/FArray3.hh>
338 #include <ObjexxFCL/FArray3A.fwd.hh>
339 #include <ObjexxFCL/FArray3D.fwd.hh>
340 #include <ObjexxFCL/FArray3D.hh>
341 #include <ObjexxFCL/FArray3P.fwd.hh>
342 #include <ObjexxFCL/FArray4.all.fwd.hh>
343 #include <ObjexxFCL/FArray4.fwd.hh>
344 #include <ObjexxFCL/FArray4A.fwd.hh>
345 #include <ObjexxFCL/FArray4D.fwd.hh>
346 #include <ObjexxFCL/FArray4P.fwd.hh>
347 #include <ObjexxFCL/FArray5.all.fwd.hh>
348 #include <ObjexxFCL/FArray5.fwd.hh>
349 #include <ObjexxFCL/FArray5A.fwd.hh>
350 #include <ObjexxFCL/FArray5D.fwd.hh>
351 #include <ObjexxFCL/FArray5P.fwd.hh>
352 #include <ObjexxFCL/FArray6.all.fwd.hh>
353 #include <ObjexxFCL/FArray6.fwd.hh>
354 #include <ObjexxFCL/FArray6A.fwd.hh>
355 #include <ObjexxFCL/FArray6D.fwd.hh>
356 #include <ObjexxFCL/FArray6P.fwd.hh>
357 #include <ObjexxFCL/FArrayInitializer.fwd.hh>
358 #include <ObjexxFCL/FArrayInitializer.hh>
359 #include <ObjexxFCL/FArraySection.fwd.hh>
360 #include <ObjexxFCL/FArraySection.hh>
361 #include <ObjexxFCL/FArrayTraits.fwd.hh>
362 #include <ObjexxFCL/FArrayTraits.hh>
363 #include <ObjexxFCL/IndexRange.fwd.hh>
364 #include <ObjexxFCL/IndexRange.hh>
365 #include <ObjexxFCL/InitializerSentinel.hh>
366 #include <ObjexxFCL/KeyFArray1D.fwd.hh>
367 #include <ObjexxFCL/KeyFArray2D.fwd.hh>
368 #include <ObjexxFCL/KeyFArray3D.fwd.hh>
369 #include <ObjexxFCL/KeyFArray4D.fwd.hh>
370 #include <ObjexxFCL/KeyFArray5D.fwd.hh>
371 #include <ObjexxFCL/KeyFArray6D.fwd.hh>
372 #include <ObjexxFCL/Observer.fwd.hh>
373 #include <ObjexxFCL/Observer.hh>
374 #include <ObjexxFCL/ObserverMulti.hh>
375 #include <ObjexxFCL/ObserverSingle.hh>
376 #include <ObjexxFCL/ProxySentinel.hh>
377 #include <ObjexxFCL/SetWrapper.fwd.hh>
378 #include <ObjexxFCL/Star.fwd.hh>
379 #include <ObjexxFCL/Star.hh>
380 #include <ObjexxFCL/TypeTraits.hh>
381 #include <ObjexxFCL/char.functions.hh>
382 #include <ObjexxFCL/proxy_const_assert.hh>
383 #include <ObjexxFCL/string.functions.hh>
404 #include <basic/MetricValue.fwd.hh>
405 #include <basic/datacache/BasicDataCache.fwd.hh>
406 #include <basic/datacache/BasicDataCache.hh>
407 #include <basic/datacache/CacheableData.fwd.hh>
408 #include <basic/datacache/CacheableData.hh>
409 #include <basic/datacache/DataCache.fwd.hh>
410 #include <basic/datacache/DataCache.hh>
411 #include <basic/options/keys/OptionKeys.hh>
412 #include <basic/options/keys/run.OptionKeys.gen.hh>
413 #include <basic/options/keys/score.OptionKeys.gen.hh>
414 #include <basic/options/option.hh>
415 #include <boost/algorithm/string/erase.hpp>
416 #include <boost/bind.hpp>
417 #include <boost/function.hpp>
418 #include <boost/functional/hash.hpp>
419 #include <boost/unordered_map.hpp>
441 template <
class T_Etable >
449 using namespace etable::count_pair;
450 using namespace graph;
452 PROF_START( basic::SETUP_NBLIST );
463 for (
Size ii = 1; ii <= nres; ++ii ) {
472 for (
Size ii = 1; ii <= nres; ++ii ) {
488 bool const first_time_setup(
nblist_.size() == 0 );
492 for (
Size i=1; i<= nres; ++i ) {
496 for (
Size j=1; j<= natoms; ++j ) {
508 core::conformation::find_neighbors_restricted<core::conformation::PointGraphVertexData,core::conformation::PointGraphEdgeData>(
525 for (
Size i=1; i<= nres; ++i ) {
529 if (!residue_mask[i])
continue;
534 if ( etable_method.defines_intrares_energy( sfxn.
weights() ) && imap == 0 ) {
538 for (
int ii=1, ii_end = ires.natoms(); ii<= ii_end; ++ii ) {
540 bool const iatom_is_hydrogen( ires.atom_is_hydrogen( ii ) );
541 for (
int jj=ii+1, jj_end = ires.natoms(); jj<= jj_end; ++jj ) {
545 bool const jatom_is_hydrogen( ires.atom_is_hydrogen( jj ) );
549 if ( count_pair->count( ii, jj, weight, path_dist ) ) {
550 Real const dist_sq( iatom.xyz().distance_squared( jatom.xyz() ));
552 if ( dist_sq <= cutoff ) {
557 Real const wide_cutoff
558 ( ( iatom_is_hydrogen && jatom_is_hydrogen ) ?
561 if ( dist_sq <= wide_cutoff ) {
581 iru = residue_point_graph->get_vertex( i ).upper_edge_list_begin(),
582 irue = residue_point_graph->get_vertex( i ).upper_edge_list_end();
583 iru != irue; ++iru ) {
588 Size const j( iru->upper_vertex() );
589 Distance const ijsqrdist( iru->data().dsq() );
592 if ( ijreach < 0 || ijsqrdist > ijreach * ijreach )
continue;
595 if ( imap ==
domain_map_(j) && imap != 0 )
continue;
602 for (
int ii=1, ii_end = ires.natoms(); ii<= ii_end; ++ii ) {
604 bool const iatom_is_hydrogen( ires.atom_is_hydrogen( ii ) );
605 for (
int jj=1, jj_end = jres.natoms(); jj<= jj_end; ++jj ) {
607 bool const jatom_is_hydrogen( jres.atom_is_hydrogen( jj ) );
611 if ( count_pair->count( ii, jj, weight, path_dist ) ) {
612 Real const dist_sq( iatom.xyz().distance_squared( jatom.xyz() ));
614 if ( dist_sq <= cutoff ) {
619 Real const wide_cutoff
620 ( ( iatom_is_hydrogen && jatom_is_hydrogen ) ?
623 if ( dist_sq <= wide_cutoff ) {
634 PROF_STOP ( basic::SETUP_NBLIST );
640 template <
class T_Etable >
656 bool update_narrow =
false;
657 bool update_wide =
false;
660 for (
Size ii = 1; ii <= nres; ++ii ) {
678 update_narrow =
true;
683 if ( update_wide )
break;
694 setup( pose, sfxn, etable_method );
695 }
else if ( update_narrow ) {