16 #ifndef INCLUDED_core_scoring_etable_BaseEtableEnergy_tmpl_hh
17 #define INCLUDED_core_scoring_etable_BaseEtableEnergy_tmpl_hh
75 #include <basic/options/option.hh>
79 #include <basic/options/keys/score.OptionKeys.gen.hh>
80 #include <basic/options/keys/run.OptionKeys.gen.hh>
83 #include <platform/types.hh>
269 #include <utility/Bound.fwd.hh>
270 #include <utility/Bound.hh>
271 #include <utility/PyAssert.hh>
272 #include <utility/assert.hh>
273 #include <utility/down_cast.hh>
274 #include <utility/exit.hh>
275 #include <utility/in_place_list.fwd.hh>
276 #include <utility/in_place_list.hh>
277 #include <utility/stream_util.hh>
278 #include <utility/string_util.hh>
279 #include <utility/vector0_bool.hh>
280 #include <utility/vector1.fwd.hh>
281 #include <utility/vector1.hh>
282 #include <utility/vector1_bool.hh>
283 #include <utility/vectorL.fwd.hh>
284 #include <utility/vectorL.hh>
285 #include <utility/vectorL_Selector.hh>
286 #include <utility/vectorL_bool.hh>
287 #include <utility/file/FileName.fwd.hh>
288 #include <utility/file/FileName.hh>
289 #include <utility/file/PathName.fwd.hh>
290 #include <utility/file/PathName.hh>
291 #include <utility/keys/AutoKey.fwd.hh>
292 #include <utility/keys/AutoKey.hh>
293 #include <utility/keys/Key.fwd.hh>
294 #include <utility/keys/Key.hh>
295 #include <utility/keys/Key2Tuple.fwd.hh>
296 #include <utility/keys/Key2Tuple.hh>
297 #include <utility/keys/Key3Tuple.fwd.hh>
298 #include <utility/keys/Key3Tuple.hh>
299 #include <utility/keys/Key4Tuple.fwd.hh>
300 #include <utility/keys/Key4Tuple.hh>
301 #include <utility/keys/KeyLess.fwd.hh>
302 #include <utility/keys/KeyLookup.fwd.hh>
303 #include <utility/keys/KeyLookup.hh>
304 #include <utility/keys/NoClient.fwd.hh>
305 #include <utility/keys/NoClient.hh>
306 #include <utility/keys/SmallKeyVector.fwd.hh>
307 #include <utility/keys/SmallKeyVector.hh>
308 #include <utility/keys/UserKey.fwd.hh>
309 #include <utility/keys/VariantKey.fwd.hh>
310 #include <utility/keys/VariantKey.hh>
311 #include <utility/options/AnyOption.fwd.hh>
312 #include <utility/options/AnyOption.hh>
313 #include <utility/options/AnyVectorOption.fwd.hh>
314 #include <utility/options/AnyVectorOption.hh>
315 #include <utility/options/BooleanOption.fwd.hh>
316 #include <utility/options/BooleanOption.hh>
317 #include <utility/options/BooleanVectorOption.fwd.hh>
318 #include <utility/options/BooleanVectorOption.hh>
319 #include <utility/options/FileOption.fwd.hh>
320 #include <utility/options/FileOption.hh>
321 #include <utility/options/FileVectorOption.fwd.hh>
322 #include <utility/options/FileVectorOption.hh>
323 #include <utility/options/IntegerOption.fwd.hh>
324 #include <utility/options/IntegerOption.hh>
325 #include <utility/options/IntegerVectorOption.fwd.hh>
326 #include <utility/options/IntegerVectorOption.hh>
327 #include <utility/options/Option.fwd.hh>
328 #include <utility/options/Option.hh>
329 #include <utility/options/OptionCollection.fwd.hh>
330 #include <utility/options/OptionCollection.hh>
331 #include <utility/options/PathOption.fwd.hh>
332 #include <utility/options/PathOption.hh>
333 #include <utility/options/PathVectorOption.fwd.hh>
334 #include <utility/options/PathVectorOption.hh>
335 #include <utility/options/RealOption.fwd.hh>
336 #include <utility/options/RealOption.hh>
337 #include <utility/options/RealVectorOption.fwd.hh>
338 #include <utility/options/RealVectorOption.hh>
339 #include <utility/options/ScalarOption.fwd.hh>
340 #include <utility/options/ScalarOption.hh>
341 #include <utility/options/ScalarOption_T_.fwd.hh>
342 #include <utility/options/ScalarOption_T_.hh>
343 #include <utility/options/StringOption.fwd.hh>
344 #include <utility/options/StringOption.hh>
345 #include <utility/options/StringVectorOption.fwd.hh>
346 #include <utility/options/StringVectorOption.hh>
347 #include <utility/options/VariantOption.fwd.hh>
348 #include <utility/options/VariantOption.hh>
349 #include <utility/options/VectorOption.fwd.hh>
350 #include <utility/options/VectorOption.hh>
351 #include <utility/options/VectorOption_T_.fwd.hh>
352 #include <utility/options/VectorOption_T_.hh>
353 #include <utility/options/mpi_stderr.hh>
354 #include <utility/options/keys/AnyOptionKey.fwd.hh>
355 #include <utility/options/keys/AnyOptionKey.hh>
356 #include <utility/options/keys/AnyVectorOptionKey.fwd.hh>
357 #include <utility/options/keys/AnyVectorOptionKey.hh>
358 #include <utility/options/keys/BooleanOptionKey.fwd.hh>
359 #include <utility/options/keys/BooleanOptionKey.hh>
360 #include <utility/options/keys/BooleanVectorOptionKey.fwd.hh>
361 #include <utility/options/keys/BooleanVectorOptionKey.hh>
362 #include <utility/options/keys/FileOptionKey.fwd.hh>
363 #include <utility/options/keys/FileOptionKey.hh>
364 #include <utility/options/keys/FileVectorOptionKey.fwd.hh>
365 #include <utility/options/keys/FileVectorOptionKey.hh>
366 #include <utility/options/keys/IntegerOptionKey.fwd.hh>
367 #include <utility/options/keys/IntegerOptionKey.hh>
368 #include <utility/options/keys/IntegerVectorOptionKey.fwd.hh>
369 #include <utility/options/keys/IntegerVectorOptionKey.hh>
370 #include <utility/options/keys/OptionKey.fwd.hh>
371 #include <utility/options/keys/OptionKey.hh>
372 #include <utility/options/keys/OptionKeys.hh>
373 #include <utility/options/keys/PathOptionKey.fwd.hh>
374 #include <utility/options/keys/PathOptionKey.hh>
375 #include <utility/options/keys/PathVectorOptionKey.fwd.hh>
376 #include <utility/options/keys/PathVectorOptionKey.hh>
377 #include <utility/options/keys/RealOptionKey.fwd.hh>
378 #include <utility/options/keys/RealOptionKey.hh>
379 #include <utility/options/keys/RealVectorOptionKey.fwd.hh>
380 #include <utility/options/keys/RealVectorOptionKey.hh>
381 #include <utility/options/keys/ScalarOptionKey.fwd.hh>
382 #include <utility/options/keys/ScalarOptionKey.hh>
383 #include <utility/options/keys/StringOptionKey.fwd.hh>
384 #include <utility/options/keys/StringOptionKey.hh>
385 #include <utility/options/keys/StringVectorOptionKey.fwd.hh>
386 #include <utility/options/keys/StringVectorOptionKey.hh>
387 #include <utility/options/keys/VectorOptionKey.fwd.hh>
388 #include <utility/options/keys/VectorOptionKey.hh>
389 #include <utility/options/keys/all.hh>
390 #include <utility/pointer/ReferenceCount.fwd.hh>
391 #include <utility/pointer/ReferenceCount.hh>
392 #include <utility/pointer/access_ptr.fwd.hh>
393 #include <utility/pointer/access_ptr.hh>
394 #include <utility/pointer/owning_ptr.functions.hh>
395 #include <utility/pointer/owning_ptr.fwd.hh>
396 #include <utility/pointer/owning_ptr.hh>
397 #include <utility/signals/BufferedSignalHub.fwd.hh>
398 #include <utility/signals/BufferedSignalHub.hh>
399 #include <utility/signals/Link.fwd.hh>
400 #include <utility/signals/Link.hh>
401 #include <utility/signals/LinkUnit.fwd.hh>
402 #include <utility/signals/LinkUnit.hh>
403 #include <utility/signals/PausableSignalHub.fwd.hh>
404 #include <utility/signals/PausableSignalHub.hh>
405 #include <utility/signals/SignalHub.fwd.hh>
406 #include <utility/signals/SignalHub.hh>
407 #include <numeric/NumericTraits.hh>
408 #include <numeric/constants.hh>
409 #include <numeric/conversions.hh>
410 #include <numeric/numeric.functions.hh>
411 #include <numeric/sphericalVector.fwd.hh>
412 #include <numeric/sphericalVector.hh>
413 #include <numeric/trig.functions.hh>
414 #include <numeric/types.hh>
415 #include <numeric/xyz.functions.fwd.hh>
416 #include <numeric/xyz.functions.hh>
417 #include <numeric/xyzMatrix.fwd.hh>
418 #include <numeric/xyzMatrix.hh>
419 #include <numeric/xyzTriple.fwd.hh>
420 #include <numeric/xyzTriple.hh>
421 #include <numeric/xyzVector.fwd.hh>
422 #include <numeric/xyzVector.hh>
423 #include <numeric/internal/ColPointers.hh>
424 #include <numeric/internal/ColVectors.hh>
425 #include <numeric/internal/ColsPointer.hh>
426 #include <numeric/internal/RowPointers.hh>
427 #include <numeric/internal/RowVectors.hh>
428 #include <numeric/internal/RowsPointer.hh>
429 #include <ObjexxFCL/Dimension.fwd.hh>
430 #include <ObjexxFCL/Dimension.hh>
431 #include <ObjexxFCL/DimensionExpression.hh>
432 #include <ObjexxFCL/DynamicIndexRange.fwd.hh>
433 #include <ObjexxFCL/DynamicIndexRange.hh>
434 #include <ObjexxFCL/FArray.all.fwd.hh>
435 #include <ObjexxFCL/FArray.fwd.hh>
436 #include <ObjexxFCL/FArray.hh>
437 #include <ObjexxFCL/FArray1.all.fwd.hh>
438 #include <ObjexxFCL/FArray1.fwd.hh>
439 #include <ObjexxFCL/FArray1.hh>
440 #include <ObjexxFCL/FArray1A.fwd.hh>
441 #include <ObjexxFCL/FArray1D.fwd.hh>
442 #include <ObjexxFCL/FArray1D.hh>
443 #include <ObjexxFCL/FArray1P.fwd.hh>
444 #include <ObjexxFCL/FArray2.all.fwd.hh>
445 #include <ObjexxFCL/FArray2.fwd.hh>
446 #include <ObjexxFCL/FArray2.hh>
447 #include <ObjexxFCL/FArray2A.fwd.hh>
448 #include <ObjexxFCL/FArray2D.fwd.hh>
449 #include <ObjexxFCL/FArray2D.hh>
450 #include <ObjexxFCL/FArray2P.fwd.hh>
451 #include <ObjexxFCL/FArray3.all.fwd.hh>
452 #include <ObjexxFCL/FArray3.fwd.hh>
453 #include <ObjexxFCL/FArray3.hh>
454 #include <ObjexxFCL/FArray3A.fwd.hh>
455 #include <ObjexxFCL/FArray3D.fwd.hh>
456 #include <ObjexxFCL/FArray3D.hh>
457 #include <ObjexxFCL/FArray3P.fwd.hh>
458 #include <ObjexxFCL/FArray4.all.fwd.hh>
459 #include <ObjexxFCL/FArray4.fwd.hh>
460 #include <ObjexxFCL/FArray4A.fwd.hh>
461 #include <ObjexxFCL/FArray4D.fwd.hh>
462 #include <ObjexxFCL/FArray4P.fwd.hh>
463 #include <ObjexxFCL/FArray5.all.fwd.hh>
464 #include <ObjexxFCL/FArray5.fwd.hh>
465 #include <ObjexxFCL/FArray5A.fwd.hh>
466 #include <ObjexxFCL/FArray5D.fwd.hh>
467 #include <ObjexxFCL/FArray5P.fwd.hh>
468 #include <ObjexxFCL/FArray6.all.fwd.hh>
469 #include <ObjexxFCL/FArray6.fwd.hh>
470 #include <ObjexxFCL/FArray6A.fwd.hh>
471 #include <ObjexxFCL/FArray6D.fwd.hh>
472 #include <ObjexxFCL/FArray6P.fwd.hh>
473 #include <ObjexxFCL/FArrayInitializer.fwd.hh>
474 #include <ObjexxFCL/FArrayInitializer.hh>
475 #include <ObjexxFCL/FArraySection.fwd.hh>
476 #include <ObjexxFCL/FArraySection.hh>
477 #include <ObjexxFCL/FArrayTraits.fwd.hh>
478 #include <ObjexxFCL/FArrayTraits.hh>
479 #include <ObjexxFCL/IndexRange.fwd.hh>
480 #include <ObjexxFCL/IndexRange.hh>
481 #include <ObjexxFCL/InitializerSentinel.hh>
482 #include <ObjexxFCL/KeyFArray1D.fwd.hh>
483 #include <ObjexxFCL/KeyFArray2D.fwd.hh>
484 #include <ObjexxFCL/KeyFArray3D.fwd.hh>
485 #include <ObjexxFCL/KeyFArray4D.fwd.hh>
486 #include <ObjexxFCL/KeyFArray5D.fwd.hh>
487 #include <ObjexxFCL/KeyFArray6D.fwd.hh>
488 #include <ObjexxFCL/Observer.fwd.hh>
489 #include <ObjexxFCL/Observer.hh>
490 #include <ObjexxFCL/ObserverMulti.hh>
491 #include <ObjexxFCL/ObserverSingle.hh>
492 #include <ObjexxFCL/ProxySentinel.hh>
493 #include <ObjexxFCL/SetWrapper.fwd.hh>
494 #include <ObjexxFCL/Star.fwd.hh>
495 #include <ObjexxFCL/Star.hh>
496 #include <ObjexxFCL/TypeTraits.hh>
497 #include <ObjexxFCL/char.functions.hh>
498 #include <ObjexxFCL/proxy_const_assert.hh>
499 #include <ObjexxFCL/string.functions.hh>
520 #include <basic/MetricValue.fwd.hh>
521 #include <basic/datacache/BasicDataCache.fwd.hh>
522 #include <basic/datacache/BasicDataCache.hh>
523 #include <basic/datacache/CacheableData.fwd.hh>
524 #include <basic/datacache/CacheableData.hh>
525 #include <basic/datacache/DataCache.fwd.hh>
526 #include <basic/datacache/DataCache.hh>
527 #include <basic/options/keys/OptionKeys.hh>
528 #include <basic/prof.hh>
529 #include <boost/algorithm/string/erase.hpp>
530 #include <boost/bind.hpp>
531 #include <boost/config.hpp>
532 #include <boost/function.hpp>
533 #include <boost/functional/hash.hpp>
534 #include <boost/pool/detail/mutex.hpp>
535 #include <boost/pool/poolfwd.hpp>
536 #include <boost/unordered_map.hpp>
543 #ifdef APL_TEMP_DEBUG
545 Size & mingraph_n_atpairE_evals()
547 static Size mingraph_n_atpairE_evals_;
548 return mingraph_n_atpairE_evals_;
552 template<
class Evaluator >
584 template<
class Evaluator >
596 :
parent( rsd1, rsd2, evaluator, emap )
608 template<
class Evaluator >
620 :
parent( rsd1, rsd2, evaluator, emap )
632 template<
class Evaluator >
644 :
parent( rsd1, rsd2, evaluator, emap )
656 template<
class Evaluator >
668 :
parent( rsd1, rsd2, evaluator, emap )
680 template<
class Evaluator >
692 :
parent( rsd1, rsd2, evaluator, emap )
705 using namespace etrie;
706 using namespace trie;
707 using namespace basic::options;
710 template <
class Derived >
717 etable_( etable_in ),
718 safe_max_dis2( etable_in.get_safe_max_dis2() ),
719 hydrogen_interaction_cutoff2_( option[ OptionKeys::score::fa_Hatr ] ?
720 std::pow( std::sqrt( etable_in.hydrogen_interaction_cutoff2()) + std::sqrt( safe_max_dis2 ), 2)
721 : etable_in.hydrogen_interaction_cutoff2() ),
722 exclude_DNA_DNA( options.exclude_DNA_DNA() )
728 template <
class Derived >
731 etable_( src.etable_ ),
732 safe_max_dis2( src.safe_max_dis2 ),
733 hydrogen_interaction_cutoff2_( src.hydrogen_interaction_cutoff2_ ),
734 exclude_DNA_DNA( src.exclude_DNA_DNA )
740 template <
class Derived >
748 #ifdef APL_TEMP_DEBUG
749 if ( mingraph_n_atpairE_evals() != 0 ) {
750 std::cout <<
"mingraph_n_atpairE_evals: " << mingraph_n_atpairE_evals() << std::endl;
752 mingraph_n_atpairE_evals() = 0;
758 #ifdef APL_TEMP_DEBUG
773 resvect.push_back( & pose.
residue( ii ) );
778 for (
Size ii=1, ii_end=ires.
natoms(); ii<= ii_end; ++ii ) {
782 AtomNeighbors const & intranbrs( nblist.intrares_upper_atom_neighbors(i,ii) );
784 for ( AtomNeighbors::const_iterator nbr=intranbrs.begin(),
785 nbr_end=intranbrs.end(); nbr!= nbr_end; ++nbr ) {
786 Size const jj( nbr->atomno() );
787 Real const cp_weight( nbr->weight_func() * nbr->weight() );
790 static_cast< Derived
const &
> (*this).intrares_evaluator().atom_pair_energy( iatom, jatom, cp_weight, tbenergy_map, dsq );
794 AtomNeighbors const & nbrs( nblist.upper_atom_neighbors(i,ii) );
795 for ( AtomNeighbors::const_iterator nbr=nbrs.begin(),
796 nbr_end=nbrs.end(); nbr!= nbr_end; ++nbr ) {
797 #ifdef APL_TEMP_DEBUG
800 Size const j( nbr->rsd() );
801 Size const jj( nbr->atomno() );
803 Real const cp_weight( nbr->weight_func()*nbr->weight() );
805 static_cast< Derived
const &
> (*this).interres_evaluator().atom_pair_energy( iatom, jatom, cp_weight, tbenergy_map, dsq );
810 #ifdef APL_TEMP_DEBUG
811 std::cout <<
"n_at_pairE_evals: " << n_d2 << std::endl;
819 totals += tbenergy_map;
823 template <
class Derived >
831 template <
class Derived >
839 using namespace basic::options;
840 using namespace basic::options::OptionKeys;
850 Real const tolerated_narrow_nblist_motion = option[ run::nblist_autoupdate_narrow ];
851 Real const XX = etable_.max_dis() + 2 * tolerated_narrow_nblist_motion;
852 Real const XH = etable_.max_non_hydrogen_lj_radius() + etable_.max_hydrogen_lj_radius()
853 + 2 * tolerated_narrow_nblist_motion;
854 Real const HH = etable_.max_hydrogen_lj_radius() + etable_.max_hydrogen_lj_radius()
855 + 2 * tolerated_narrow_nblist_motion;
868 etable_.nblist_dis2_cutoff_XX(),
869 etable_.nblist_dis2_cutoff_XH(),
870 etable_.nblist_dis2_cutoff_HH());
873 nblist->
setup( pose, sfxn, static_cast<Derived const&> (*
this));
880 template <
class Derived >
887 assert( dynamic_cast< Derived const* > (
this) );
888 Derived
const * ptr =
static_cast< Derived
const *
> (
this);
889 ptr->setup_for_scoring_(pose,scfxn);
898 template <
class Derived >
906 assert( dynamic_cast< Derived const* > (
this) );
907 Derived
const * ptr =
static_cast< Derived const*
> (
this);
908 ptr->setup_for_scoring_(pose,scfxn);
921 template <
class Derived >
940 tries->trie( ii, one_rotamer_trie );
948 template <
class Derived >
963 template <
class Derived >
976 trie_collection.trie( resid, one_rotamer_trie );
982 template <
class Derived >
991 return get_count_pair_function( pose.
residue( res1 ), pose.
residue( res2 ), pose, sfxn );
996 template <
class Derived >
1005 using namespace count_pair;
1007 if ( exclude_DNA_DNA && res1.
is_DNA() && res2.
is_DNA() ) {
1008 return new CountPairNone;
1012 return CountPairFactory::create_count_pair_function( res1, res2, crossover );
1016 template <
class Derived >
1024 using namespace count_pair;
1026 if ( exclude_DNA_DNA && res.
is_DNA() ) {
1027 return new CountPairNone;
1031 return CountPairFactory::create_intrares_count_pair_function( res, crossover );
1039 template <
class Derived >
1048 using namespace methods;
1054 return get_count_pair_function_trie( res1, res2, trie1, trie2, pose, sfxn );
1057 template <
class Derived >
1068 using namespace count_pair;
1071 if ( exclude_DNA_DNA && res1.
is_DNA() && res2.
is_DNA() ) {
1077 Size conn1 = trie1->get_count_pair_data_for_residue( res2.
seqpos() );
1078 Size conn2 = trie2->get_count_pair_data_for_residue( res1.
seqpos() );
1082 switch ( crossover ) {
1098 cpgen->crossover( 3 );
1100 cpgen->crossover( 4 );
1104 cpgen->hard_crossover(
false );
1126 if ( res1.is_pseudobonded( res2.seqpos ) {
1127 return CP_MULTIPLE_BONDS_OR_PSEUDOBONDS;
1128 } else if ( res1.is_bonded(res2) ) {
1129 if ( res1.connections_to_residue( res2 ).size() == 1 ) {
1132 return CP_MULTIPLE_BONDS_OR_PSEUDOBONDS;
1140 template <
class Derived >
1149 using namespace count_pair;
1169 template <
class Derived >
1183 prepare_for_residue_pair(rsd1.
seqpos(),rsd2.
seqpos(),pose);
1186 if ( exclude_DNA_DNA && rsd1.
is_DNA() && rsd2.
is_DNA() ) {
1195 template <
class Derived >
1202 template <
class Derived >
1246 for (
Size ii = 1, iiend = neighbs.size(); ii <= iiend; ++ii ) {
1249 static_cast< Derived
const &
> (*this).interres_evaluator().atom_pair_energy( atom1, atom2, neighbs[ ii ].weight(), emap, dsq );
1250 #ifdef APL_TEMP_DEBUG
1251 ++mingraph_n_atpairE_evals();
1256 template <
class Derived >
1290 using namespace basic::options;
1291 using namespace basic::options::OptionKeys;
1299 Real const tolerated_narrow_nblist_motion = 0.75;
1300 Real const XX = etable_.max_dis() + 2 * tolerated_narrow_nblist_motion;
1301 Real const XH = etable_.max_non_hydrogen_lj_radius() + etable_.max_hydrogen_lj_radius()
1302 + 2 * tolerated_narrow_nblist_motion;
1303 Real const HH = etable_.max_hydrogen_lj_radius() + etable_.max_hydrogen_lj_radius()
1304 + 2 * tolerated_narrow_nblist_motion;
1306 nblist->initialize_from_residues(
1307 XX*
XX, XH*XH, HH*HH,
1308 rsd1, rsd2, count_pair );
1314 template <
class Derived >
1325 template <
class Derived >
1340 template <
class Derived >
1351 template <
class Derived >
1360 setup_for_scoring_for_residue( rsd, pose, sfxn, min_data );
1364 template <
class Derived >
1373 template <
class Derived >
1402 template <
class Derived >
1410 template <
class Derived >
1422 setup_for_scoring_for_residue_pair( rsd1, rsd2, minsingle_data1, minsingle_data2, pose, sfxn, data_cache );
1470 template <
class Derived >
1514 assert( r1_at_derivs.size() >= rsd1.
natoms() );
1515 assert( r2_at_derivs.size() >= rsd2.
natoms() );
1521 typename Derived::Evaluator evaluator( static_cast< Derived const & > (*this).interres_evaluator() );
1522 evaluator.set_weights( weights );
1526 for (
Size ii = 1, iiend = neighbs.size(); ii <= iiend; ++ii ) {
1529 Real const dE_dR_over_r( evaluator.eval_dE_dR_over_r( atom1, atom2, weights, f1, f2 ) );
1531 if ( dE_dR_over_r != 0.0 ) {
1532 f1 *= dE_dR_over_r * neighbs[ ii ].weight();
1533 f2 *= dE_dR_over_r * neighbs[ ii ].weight();
1534 r1_at_derivs[ neighbs[ ii ].atomno1() ].f1() += f1;
1535 r1_at_derivs[ neighbs[ ii ].atomno1() ].f2() += f2;
1536 r2_at_derivs[ neighbs[ ii ].atomno2() ].f1() += -1*f1;
1537 r2_at_derivs[ neighbs[ ii ].atomno2() ].f2() += -1*f2;
1544 template <
class Derived >
1558 if ( exclude_DNA_DNA && rsd1.
is_DNA() && rsd2.
is_DNA() ) {
1568 template <
class Derived >
1582 if ( exclude_DNA_DNA && rsd1.
is_DNA() && rsd2.
is_DNA() ) {
1591 template <
class Derived >
1605 if ( exclude_DNA_DNA && rsd1.
is_DNA() && rsd2.
is_DNA() ) {
1615 template <
class Derived >
1623 ObjexxFCL::FArray2D< core::PackerEnergy > & energy_table
1628 using namespace methods;
1629 ObjexxFCL::FArray2D< core::PackerEnergy > temp_table1( energy_table );
1630 ObjexxFCL::FArray2D< core::PackerEnergy > temp_table2( energy_table );
1632 temp_table1 = 0; temp_table2 = 0;
1636 typename Derived::Evaluator evaluator( static_cast< Derived const & > (*this).interres_evaluator() );
1637 evaluator.set_weights( weights );
1653 evaluator.trie_vs_trie( *trie1, *trie2, *cp, temp_table1, temp_table2 );
1657 energy_table += temp_table1;
1681 template <
class Derived >
1693 using namespace methods;
1699 typename Derived::Evaluator evaluator( static_cast< Derived const & > (*this).interres_evaluator() );
1700 evaluator.set_weights( weights );
1717 evaluator.trie_vs_path( *trie1, *trie2, *cp, temp_vector1, temp_vector2 );
1721 energy_vector[ ii ] += temp_vector1[ ii ];
1744 template <
class Derived >
1751 template <
class Derived >
1770 for (
Size ii = 1, iiend = neighbs.size(); ii <= iiend; ++ii ) {
1773 static_cast< Derived
const &
> (*this).intrares_evaluator().atom_pair_energy( atom1, atom2, neighbs[ ii ].weight(), emap, dsq );
1780 template <
class Derived >
1792 if ( (static_cast< Derived const & > (*
this)).defines_intrares_energy( sfxn.
weights() ) ) {
1793 using namespace basic::options;
1794 using namespace basic::options::OptionKeys;
1801 Real const tolerated_narrow_nblist_motion = option[ run::nblist_autoupdate_narrow ];
1802 Real const XX = etable_.max_dis() + 2 * tolerated_narrow_nblist_motion;
1803 Real const XH = etable_.max_non_hydrogen_lj_radius() + etable_.max_hydrogen_lj_radius()
1804 + 2 * tolerated_narrow_nblist_motion;
1805 Real const HH = etable_.max_hydrogen_lj_radius() + etable_.max_hydrogen_lj_radius()
1806 + 2 * tolerated_narrow_nblist_motion;
1810 rsd, count_pair,
XX*
XX, XH*XH, HH*HH );
1817 template <
class Derived >
1835 typename Derived::Evaluator evaluator( static_cast< Derived const & > (*this).intrares_evaluator() );
1836 evaluator.set_weights( weights );
1838 for (
Size ii = 1, iiend = neighbs.size(); ii <= iiend; ++ii ) {
1841 Real const dE_dR_over_r( evaluator.eval_dE_dR_over_r( atom1, atom2, weights, f1, f2 ) );
1842 if ( dE_dR_over_r != 0.0 ) {
1843 f1 *= dE_dR_over_r * neighbs[ ii ].weight();
1844 f2 *= dE_dR_over_r * neighbs[ ii ].weight();
1845 atom_derivs[ neighbs[ ii ].atomno1() ].f1() += f1;
1846 atom_derivs[ neighbs[ ii ].atomno1() ].f2() += f2;
1847 atom_derivs[ neighbs[ ii ].atomno2() ].f1() += -1 * f1;
1848 atom_derivs[ neighbs[ ii ].atomno2() ].f2() += -1 * f2;
1856 template <
class Derived >
1863 using namespace etrie;
1864 using namespace trie;
1871 return create_trie( rotset, at, cpdat, cpdata_map, atomic_interaction_cutoff() );
1874 return create_trie( rotset, at, cpdat, cpdata_map, atomic_interaction_cutoff() );
1875 }
else if ( cpdata_map.
n_entries() == 2 ) {
1877 return create_trie( rotset, at, cpdat, cpdata_map, atomic_interaction_cutoff() );
1878 }
else if ( cpdata_map.
n_entries() == 3 ) {
1880 return create_trie( rotset, at, cpdat, cpdata_map, atomic_interaction_cutoff() );
1883 std::cerr <<
"Unsupported number of residue connections in trie construction." << std::endl;
1890 template <
class Derived >
1897 using namespace etrie;
1898 using namespace trie;
1905 return create_trie( residue, at, cpdat, cpdata_map, atomic_interaction_cutoff() );
1908 return create_trie( residue, at, cpdat, cpdata_map, atomic_interaction_cutoff() );
1909 }
else if ( cpdata_map.
n_entries() == 2 ) {
1911 return create_trie( residue, at, cpdat, cpdata_map, atomic_interaction_cutoff() );
1912 }
else if ( cpdata_map.
n_entries() == 3 ) {
1914 return create_trie( residue, at, cpdat, cpdata_map, atomic_interaction_cutoff() );
1917 std::cerr <<
"Unsupported number of residue connections in trie construction." << std::endl;
1923 template <
class Derived >
1930 template <
class Derived >
1944 if ( exclude_DNA_DNA && rsd1.
is_DNA() && rsd2.
is_DNA() ) {
1948 typename Derived::Evaluator
const & evaluator( static_cast< Derived const & > (*this).interres_evaluator() );
1952 emap[ evaluator.st_atr() ] += tbemap[ evaluator.st_atr() ];
1953 emap[ evaluator.st_rep() ] += tbemap[ evaluator.st_rep() ];
1957 template <
class Derived >
1971 if ( exclude_DNA_DNA && rsd1.
is_DNA() && rsd2.
is_DNA() ) {
1975 typename Derived::Evaluator
const & evaluator( static_cast< Derived const & > (*this).interres_evaluator() );
1979 emap[ evaluator.st_atr() ] += tbemap[ evaluator.st_atr() ];
1980 emap[ evaluator.st_rep() ] += tbemap[ evaluator.st_rep() ];
1987 template <
class Derived >
1999 Size const idresid =
id.rsd();
2006 typename Derived::Evaluator intrares_evaluator( static_cast< Derived const & > (*this).intrares_evaluator() );
2007 typename Derived::Evaluator interres_evaluator( static_cast< Derived const & > (*this).interres_evaluator() );
2008 intrares_evaluator.set_weights( weights );
2009 interres_evaluator.set_weights( weights );
2011 for ( scoring::AtomNeighbors::const_iterator it2=nbrs.begin(),
2012 it2e=nbrs.end(); it2 != it2e; ++it2 ) {
2020 if ( idresid == (
Size) nbr.
rsd() ) {
2023 Real const dE_dR_over_r( intrares_evaluator.eval_dE_dR_over_r( atom1, atom2, weights, f1, f2 ) );
2025 if ( dE_dR_over_r != 0.0 ) {
2026 F1 += dE_dR_over_r * cp_weight * f1;
2027 F2 += dE_dR_over_r * cp_weight * f2;
2032 Real const dE_dR_over_r( interres_evaluator.eval_dE_dR_over_r( atom1, atom2, weights, f1, f2 ) );
2034 if ( dE_dR_over_r != 0.0 ) {
2035 F1 += dE_dR_over_r * cp_weight * f1;
2036 F2 += dE_dR_over_r * cp_weight * f2;
2041 utility_exit_with_message(
"non-nblist minimize!");
2047 template <
class Derived >
2051 using namespace basic::options;
2052 using namespace basic::options::OptionKeys;
2053 return etable_.max_dis() +