32 #include <utility/vector1.hh>
33 #include <boost/pool/pool.hpp>
39 using namespace graph;
52 std::cout <<
"MinimizationNode::print() deferring to parent::print()" << std::endl;
132 (*iter)->setup_for_minimizing_for_residue( rsd, pose, sfxn, min_map,
res_min_data_ );
136 (*iter)->setup_for_minimizing_for_residue( rsd, pose, sfxn, min_map,
res_min_data_ );
149 (*iter)->setup_for_scoring_for_residue( rsd, pose, sfxn,
res_min_data_ );
154 (*iter)->setup_for_scoring_for_residue( rsd, pose, sfxn,
res_min_data_ );
167 (*iter)->setup_for_derivatives_for_residue( rsd, pose, sfxn,
res_min_data_ );
172 (*iter)->setup_for_derivatives_for_residue( rsd, pose, sfxn,
res_min_data_ );
222 if ( domain_map_color == 0 ) {
223 if ( enmeth->defines_score_for_residue( rsd )) {
224 if ( enmeth->use_extended_residue_energy_interface() ) {
229 if ( enmeth->defines_dof_derivatives( pose ) ) {
232 if ( enmeth->requires_a_setup_for_scoring_for_residue_opportunity( pose ) ) {
235 if ( enmeth->requires_a_setup_for_derivatives_for_residue_opportunity( pose ) ) {
256 if (enmeth->requires_a_setup_for_scoring_for_residue_opportunity( pose )) {
261 if (enmeth->requires_a_setup_for_derivatives_for_residue_opportunity( pose )) {
269 if ( domain_map_color == 0 ) {
270 if ( enmeth->defines_intrares_energy( weights ) && enmeth->defines_intrares_energy_for_residue( rsd )) {
271 if ( enmeth->use_extended_intrares_energy_interface() ) {
280 if ( enmeth->defines_intrares_dof_derivatives( pose ) ) {
429 parent( owner, example_edge.get_first_node_ind(), example_edge.get_second_node_ind() ),
487 bool res_moving_wrt_eachother
505 (*iter)->setup_for_minimizing_for_residue_pair(
506 rsd1, rsd2, pose, sfxn, min_map,
522 (*iter)->setup_for_scoring_for_residue_pair(
539 (*iter)->setup_for_derivatives_for_residue_pair(
552 bool res_moving_wrt_eachother
577 bool res_moving_wrt_eachother
581 if ( ! enmeth->defines_score_for_residue_pair( rsd1, rsd2, res_moving_wrt_eachother ) )
return false;
583 if ( enmeth->use_extended_residue_pair_energy_interface() ) {
589 if ( enmeth->requires_a_setup_for_scoring_for_residue_pair_opportunity( pose ) ) {
592 if ( enmeth->requires_a_setup_for_derivatives_for_residue_pair_opportunity( pose ) ) {
678 minimization_edge_pool_( new boost::unordered_object_pool<
MinimizationEdge > ( 256 ) )
687 minimization_edge_pool_( new boost::unordered_object_pool<
MinimizationEdge > ( 256 ) )
699 minimization_edge_pool_( new boost::unordered_object_pool<
MinimizationEdge > ( 256 ) )
720 assert( dynamic_cast< MinimizationEdge* > (edge) );
777 static_cast< MinimizationEdge const & > (*example_edge)
823 for ( MinimizationNode::OneBodyEnergiesIterator
824 iter = min_node.sfd_req_1benmeths_begin(),
825 iter_end = min_node.sfd_req_1benmeths_end(); iter != iter_end; ++iter ) {
826 (*iter)->setup_for_scoring_for_residue( rsd, pose, min_node.res_min_data() );
829 for ( MinimizationNode::TwoBodyEnergiesIterator
830 iter = min_node.sfd_req_2benmeths_begin(),
831 iter_end = min_node.sfd_req_2benmeths_end(); iter != iter_end; ++iter ) {
832 (*iter)->setup_for_scoring_for_residue( rsd, pose, min_node.res_min_data() );
868 for ( MinimizationNode::OneBodyEnergiesIterator
869 iter = min_node.sfd_req_1benmeths_begin(),
870 iter_end = min_node.sfd_req_1benmeths_end(); iter != iter_end; ++iter ) {
871 (*iter)->setup_for_derivatives_for_residue( rsd, pose, ressingle_min_data );
874 for ( MinimizationNode::TwoBodyEnergiesIterator
875 iter = min_node.sfd_req_2benmeths_begin(),
876 iter_end = min_node.sfd_req_2benmeths_end(); iter != iter_end; ++iter ) {
877 (*iter)->setup_for_derivatives_for_residue( rsd, pose, ressingle_min_data );
915 (*iter)->eval_residue_derivatives(
916 rsd, min_node.
res_min_data(), pose, res_weights, atom_derivs );
922 (*iter)->eval_intrares_derivatives(
923 rsd, min_node.
res_min_data(), pose, res_weights, atom_derivs );
945 for ( MinimizationNode::OneBodyEnergiesIterator
946 iter = min_node.active_1benmeths_begin(),
947 iter_end = min_node.active_1benmeths_end(); iter != iter_end; ++iter ) {
948 (*iter)->eval_atom_derivative_for_residue(
949 atom_index, rsd, min_node.res_min_data(), pose, domain_map, sfxn, res_weights, F1, F2 );
952 for ( MinimizationNode::TwoBodyEnergiesIterator
953 iter = min_node.active_intrares2benmeths_begin(),
954 iter_end = min_node.active_intrares2benmeths_end(); iter != iter_end; ++iter ) {
955 (*iter)->eval_intrares_atom_derivative(
956 atom_index, rsd, min_node.res_min_data(), pose, domain_map, sfxn, res_weights, F1, F2 );
973 iter != iter_end; ++iter ) {
974 (*iter)->residue_energy( rsd, pose, emap );
979 iter != iter_end; ++iter ) {
980 (*iter)->residue_energy_ext( rsd, min_node.
res_min_data(), pose, emap );
986 iter != iter_end; ++iter ) {
987 (*iter)->eval_intrares_energy( rsd, pose, sfxn, emap );
992 iter != iter_end; ++iter ) {
993 (*iter)->eval_intrares_energy_ext( rsd, min_node.
res_min_data(), pose, sfxn, emap );
1014 iter != iter_end; ++iter ) {
1015 (*iter)->eval_residue_pair_derivatives(
1017 pose, respair_weights, r1atom_derivs, r2atom_derivs );
1039 for ( MinimizationEdge::TwoBodyEnergiesIterator
1040 iter = min_edge.active_2benmeths_begin(),
1041 iter_end = min_edge.active_2benmeths_end();
1042 iter != iter_end; ++iter ) {
1043 (*iter)->eval_atom_derivative_for_residue_pair(
1044 atom_index, res1, res2,
1045 res1_min_data, res2_min_data, min_edge.res_pair_min_data(),
1046 pose, domain_map, sfxn, respair_weights, F1, F2 );
1064 iter != iter_end; ++iter ) {
1065 (*iter)->residue_pair_energy(
1066 res1, res2, pose, sfxn, emap );
1071 iter != iter_end; ++iter ) {
1072 (*iter)->residue_pair_energy_ext(
1094 deriv += (*iter)->eval_residue_dof_derivative(
1095 rsd, min_node.
res_min_data(), dof_id, torsion_id, pose, sfxn, weights );
1101 deriv += (*iter)->eval_intraresidue_dof_derivative(
1102 rsd, min_node.
res_min_data(), dof_id, torsion_id, pose, sfxn, weights );
1126 for ( MinimizationNode::OneBodyEnergiesIterator
1127 iter = min_node.active_1benmeths_begin(),
1128 iter_end = min_node.active_1benmeths_end(); iter != iter_end; ++iter ) {
1129 (*iter)->eval_atom_derivative_for_residue(
1130 atom_index, rsd, min_node.res_min_data(), pose, domain_map, sfxn, res_weights, f1, f2 );
1133 for ( MinimizationNode::TwoBodyEnergiesIterator
1134 iter = min_node.active_intrares2benmeths_begin(),
1135 iter_end = min_node.active_intrares2benmeths_end(); iter != iter_end; ++iter ) {
1136 (*iter)->eval_intrares_atom_derivative(
1137 atom_index, rsd, min_node.res_min_data(), pose, domain_map, sfxn, res_weights, f1, f2 );
1139 F1 += min_node.weight() * f1;
1140 F2 += min_node.weight() * f2;
1156 iter != iter_end; ++iter ) {
1157 (*iter)->residue_energy( rsd, pose, scratch_emap );
1158 emap.
accumulate( scratch_emap, (*iter)->score_types(), min_node.
weight() );
1159 scratch_emap.
zero( (*iter)->score_types() );
1164 iter != iter_end; ++iter ) {
1165 (*iter)->residue_energy_ext( rsd, min_node.
res_min_data(), pose, scratch_emap );
1166 emap.
accumulate( scratch_emap, (*iter)->score_types(), min_node.
weight() );
1167 scratch_emap.
zero( (*iter)->score_types() );
1173 iter != iter_end; ++iter ) {
1174 (*iter)->eval_intrares_energy( rsd, pose, sfxn, scratch_emap );
1175 emap.
accumulate( scratch_emap, (*iter)->score_types(), min_node.
weight() );
1176 scratch_emap.
zero( (*iter)->score_types() );
1181 iter != iter_end; ++iter ) {
1182 (*iter)->eval_intrares_energy_ext( rsd, min_node.
res_min_data(), pose, sfxn, scratch_emap );
1183 emap.
accumulate( scratch_emap, (*iter)->score_types(), min_node.
weight() );
1184 scratch_emap.
zero( (*iter)->score_types() );
1210 Vector f1( 0.0 ), f2( 0.0 );
1211 for ( MinimizationEdge::TwoBodyEnergiesIterator
1212 iter = min_edge.active_2benmeths_begin(),
1213 iter_end = min_edge.active_2benmeths_end();
1214 iter != iter_end; ++iter ) {
1215 (*iter)->eval_atom_derivative_for_residue_pair(
1216 atom_index, res1, res2,
1217 res1_min_data, res2_min_data, min_edge.res_pair_min_data(),
1218 pose, domain_map, sfxn, respair_weights, f1, f2 );
1220 F1 += min_edge.weight() * f1;
1221 F2 += min_edge.weight() * f2;
1238 iter != iter_end; ++iter ) {
1239 (*iter)->residue_pair_energy(
1240 res1, res2, pose, sfxn, scratch_emap );
1241 emap.
accumulate( scratch_emap, (*iter)->score_types(), min_edge.
weight() );
1242 scratch_emap.
zero( (*iter)->score_types() );
1247 iter != iter_end; ++iter ) {
1248 (*iter)->residue_pair_energy_ext(
1250 emap.
accumulate( scratch_emap, (*iter)->score_types(), min_edge.
weight() );
1251 scratch_emap.
zero( (*iter)->score_types() );
1272 deriv += (*iter)->eval_residue_dof_derivative(
1273 rsd, min_node.
res_min_data(), dof_id, torsion_id, pose, sfxn, weights );
1279 deriv += (*iter)->eval_intraresidue_dof_derivative(
1280 rsd, min_node.
res_min_data(), dof_id, torsion_id, pose, sfxn, weights );
1282 return deriv * min_node.
weight();