14 #ifndef INCLUDED_core_pack_interaction_graph_LazyInteractionGraph_hh
15 #define INCLUDED_core_pack_interaction_graph_LazyInteractionGraph_hh
24 #include <ObjexxFCL/FArray3D.hh>
26 #include <utility/vector1.hh>
27 #include <ObjexxFCL/FArray1A.hh>
36 namespace interaction_graph {
51 virtual void print()
const;
79 int edge_to_altered_neighbor,
81 int other_node_new_state,
87 int edge_to_altered_neighbor,
235 int first_node_alt_state,
236 int second_node_orig_state,
238 int first_node_state_offset_minus_1,
239 int second_node_curr_num_states_per_aatype,
240 int aa_neighbor_offset,
241 FArray1< core::PackerEnergy > & edge_energy_table
247 int first_node_orig_state,
248 int second_node_alt_state,
251 int second_node_alt_state_num_states_per_aatype,
252 int aa_neighbor_offset,
253 FArray1< core::PackerEnergy > & edge_energy_table
262 int first_node_state_offset_minus_1,
263 int second_node_curr_num_states_per_aatype,
264 int aa_neighbor_offset,
265 FArray1< core::PackerEnergy > & edge_energy_table,
277 int second_node_alt_state_num_states_per_aatype,
278 int aa_neighbor_offset,
279 FArray1< core::PackerEnergy > & edge_energy_table,
285 int substituted_node_index,
303 ObjexxFCL::FArray2D< core::PackerEnergy >
323 int nodes_states[ 2 ],
383 ObjexxFCL::FArray2D< core::PackerEnergy >
528 int substituted_node_index,
534 int node_substituted = substituted_node_index ==
get_node_index(0) ? 0 : 1;
535 int node_not_substituted = ! node_substituted;
543 nodes_new_state_sparse_info
573 int edge_to_altered_neighbor,
575 int other_node_new_state,
581 curr_state_two_body_energies_[edge_to_altered_neighbor] = new_edge_energy;
584 other_node_new_state_sparse_info;
613 int first_node_state_offset_minus_1,
614 int second_node_curr_num_states_per_aatype,
615 int aa_neighbor_offset,
616 FArray1< core::PackerEnergy > & edge_energy_table,
623 second_node_orig_state_sparse_info,
624 first_node_state_offset_minus_1,
625 second_node_curr_num_states_per_aatype,
657 int second_node_alt_state_num_states_per_aatype,
658 int aa_neighbor_offset,
659 FArray1< core::PackerEnergy > & edge_energy_table,
665 first_node_orig_state_sparse_info,
666 second_node_alternate_state_sparse_info,
667 second_node_alt_state_num_states_per_aatype,
697 int first_node_orig_state,
698 int second_node_alt_state,
701 int second_node_alt_state_num_states_per_aatype,
702 int aa_neighbor_offset,
703 FArray1< core::PackerEnergy > & edge_energy_table
707 if (first_node_orig_state == 0 || second_node_alt_state == 0) {
711 first_node_orig_state_sparse_info,
712 second_node_alternate_state_sparse_info,
713 second_node_alt_state_num_states_per_aatype,
748 alternate_state_is_being_considered_ =
true;
753 alternate_state_ = alternate_state;
755 alt_state_sparse_mat_info_ = get_sparse_mat_info_for_state( alternate_state );
756 alternate_state_one_body_energy_ = get_one_body_energy( alternate_state );
757 alternate_state_total_energy_ = alternate_state_one_body_energy_;
758 prev_node_energy = curr_state_total_energy_;
760 int aa_neighb_linear_index_offset = aa_offsets_for_edges_.
761 index(1, 1, alt_state_sparse_mat_info_.get_aa_type() ) - 1;
763 int alt_state_num_states_per_aa_type =
764 get_num_states_for_aa_type( alt_state_sparse_mat_info_.get_aa_type() );
765 int alt_state_for_aa_type_minus_1 =
766 alt_state_sparse_mat_info_.get_state_ind_for_this_aa_type() - 1;
768 num_states_for_aa_type_for_higher_indexed_neighbor_.index(1,1) - 1;
770 for (
int ii = 1; ii <= get_num_edges_to_smaller_indexed_nodes();
771 ++ii, aa_neighb_linear_index_offset += get_num_aa_types()) {
773 alternate_state_two_body_energies_[ ii ] =
774 get_incident_lazy_edge(ii)->
775 get_alternate_state_energy_second_node(
776 neighbors_curr_state_[ii],
778 neighbors_curr_state_sparse_info_[ ii ],
779 alt_state_sparse_mat_info_,
780 alt_state_num_states_per_aa_type,
781 aa_offsets_for_edges_[
782 aa_neighb_linear_index_offset +
783 neighbors_curr_state_sparse_info_[ii].get_aa_type()
785 edge_matrix_ptrs_[ii]
789 for (
int ii = get_num_edges_to_smaller_indexed_nodes() + 1;
790 ii <= get_num_incident_edges();
791 ++ii, aa_neighb_linear_index_offset += get_num_aa_types(),
792 nstates_offset += get_num_aa_types()) {
793 alternate_state_two_body_energies_[ ii ] =
794 get_incident_lazy_edge(ii)->
795 get_alternate_state_energy_first_node(
797 neighbors_curr_state_[ii],
798 neighbors_curr_state_sparse_info_[ii],
799 alt_state_for_aa_type_minus_1,
800 num_states_for_aa_type_for_higher_indexed_neighbor_[
802 neighbors_curr_state_sparse_info_[ii].get_aa_type()
804 aa_offsets_for_edges_[
805 aa_neighb_linear_index_offset +
806 neighbors_curr_state_sparse_info_[ii].get_aa_type()
808 edge_matrix_ptrs_[ii]
812 bool all_energies_computed =
true;
813 for (
int ii = 1; ii <= get_num_incident_edges(); ++ii ) {
814 alternate_state_total_energy_ += alternate_state_two_body_energies_[ ii ];
816 all_energies_computed =
false;
819 if ( all_energies_computed ) {
820 return alternate_state_total_energy_ - curr_state_total_energy_;
823 aa_neighb_linear_index_offset = aa_offsets_for_edges_.
824 index(1, 1, alt_state_sparse_mat_info_.get_aa_type() ) - 1;
826 num_states_for_aa_type_for_higher_indexed_neighbor_.index(1,1) - 1;
828 alternate_state_total_energy_ = alternate_state_one_body_energy_;
830 for (
int ii = 1; ii <= get_num_incident_edges(); ++ii, aa_neighb_linear_index_offset += get_num_aa_types()) {
833 alternate_state_two_body_energies_[ ii ] = compute_rotamer_pair_energy(
836 neighbors_curr_state_[ ii ]
839 if ( ii <= get_num_edges_to_smaller_indexed_nodes() ) {
841 neighbors_curr_state_sparse_info_[ ii ],
842 alt_state_sparse_mat_info_,
843 alt_state_num_states_per_aa_type,
844 aa_offsets_for_edges_[
845 aa_neighb_linear_index_offset +
846 neighbors_curr_state_sparse_info_[ii].get_aa_type()
848 edge_matrix_ptrs_[ii],
849 alternate_state_two_body_energies_[ii]
853 neighbors_curr_state_sparse_info_[ii],
854 alt_state_for_aa_type_minus_1,
855 num_states_for_aa_type_for_higher_indexed_neighbor_[
857 neighbors_curr_state_sparse_info_[ii].get_aa_type()
859 aa_offsets_for_edges_[
860 aa_neighb_linear_index_offset +
861 neighbors_curr_state_sparse_info_[ii].get_aa_type()
863 edge_matrix_ptrs_[ii],
864 alternate_state_two_body_energies_[ ii ]
868 alternate_state_total_energy_ += alternate_state_two_body_energies_[ ii ];
869 if ( ii > get_num_edges_to_smaller_indexed_nodes() ) {
870 nstates_offset += get_num_aa_types();
876 return alternate_state_total_energy_ - curr_state_total_energy_;
904 int first_node_alt_state,
905 int second_node_orig_state,
907 int first_node_state_offset_minus_1,
908 int second_node_curr_num_states_per_aatype,
909 int aa_neighbor_offset,
910 FArray1< core::PackerEnergy > & edge_energy_table
914 if ( first_node_alt_state == 0 || second_node_orig_state == 0 ) {
918 second_node_orig_state_sparse_info,
919 first_node_state_offset_minus_1,
920 second_node_curr_num_states_per_aatype,