22 #include <ObjexxFCL/FArray1D.hh>
23 #include <ObjexxFCL/FArray1A.hh>
24 #include <ObjexxFCL/FArray2D.hh>
36 #include <utility/exit.hh>
38 #include <utility/vector1.hh>
43 namespace interaction_graph {
56 num_aa_types_( get_pdig_owner()->get_num_aatypes() ),
57 num_states_for_aatype_( num_aa_types_, 0 ),
58 sparse_mat_info_for_state_( num_states + 1),
59 one_body_energies_(num_states + 1, 0.0f),
60 curr_state_total_energy_( 0.0 ),
61 alternate_state_is_being_considered_( false )
76 std::cerr <<
"(" << ii <<
", " <<
81 if ( ii % 3 == 0 ) std::cerr << std::endl;
83 std::cerr << std::endl <<
"-----------------" << std::endl;
192 PDNode::getMemoryUsageInBytes() const
194 unsigned int total_memory = 0;
195 total_memory += num_states_for_aatype_.size() * sizeof( int );
196 total_memory += sparse_mat_info_for_state_.size() * sizeof( SparseMatrixIndex );
197 total_memory += one_body_energies_.size() * sizeof( core::PackerEnergy );
198 total_memory += neighbors_curr_state_.size() * sizeof (int );
200 total_memory += aa_offsets_for_edges_.size() * sizeof( int );
201 total_memory += num_states_for_aa_type_for_higher_indexed_neighbor_.size() * sizeof( int );
202 total_memory += neighbors_curr_state_.size() * sizeof( int );
203 total_memory += neighbors_curr_state_sparse_info_.size() * sizeof( SparseMatrixIndex );
204 total_memory += edge_matrix_ptrs_.size() * sizeof( FArray1A< core::PackerEnergy > );
206 total_memory += curr_state_two_body_energies_.size() * sizeof( float );
207 total_memory += alternate_state_two_body_energies_.size() * sizeof( float );
209 total_memory += sizeof( PDNode );
210 //total_memory += NodeBase::getMemoryUsageInBytes();
235 std::fill( position1,
259 if (new_state == 0) {
319 std::copy( alt_position1,
365 int count_neighbs_with_higher_indices = 0;
377 if ( edge_table_size != 0 ) {
385 FArray2D_int
const & edge_aa_neighb_offsets =
391 ++count_neighbs_with_higher_indices;
397 jj, count_neighbs_with_higher_indices) =
398 neighb_num_states_per_aa[ jj ];
405 edge_aa_neighb_offsets(jj, kk);
461 std::cerr <<
"curr_state_sparse_mat_info_ ";
464 std::cerr <<
"curr_state_one_body_energy_ ";
472 std::cerr << std::endl;
499 unsigned int total_memory = 0;
509 total_memory +=
edge_matrix_ptrs_.size() *
sizeof( FArray1A< core::PackerEnergy > );
527 void PDNode::prepare_to_write_to_file()
529 initialize_aa_for_state_array();
534 void PDNode::initialize_aa_for_state_array()
536 aa_types_for_instance_states_.dimension( get_num_states() );
537 for (int ii = 1; ii <= get_num_states(); ++ii)
539 aa_types_for_instance_states_(ii) = sparse_mat_info_for_state_[ii].get_aa_type();
544 void PDNode::clean_up_after_writing_to_file()
546 aa_types_for_instance_states_.dimension(0);
565 void PDNode::prepare_to_read_energies_from_file(int num_states_for_node_in_file)
567 int num_aa_types_in_file =
568 get_pdig_owner()->get_num_file_aatypes();
570 num_states_in_file_ = num_states_for_node_in_file;
571 instance_states_2_file_states_.dimension( get_num_states() );
572 file_states_2_instance_states_.dimension( num_states_for_node_in_file );
573 aa_types_for_file_states_.dimension( num_states_for_node_in_file );
574 num_file_states_for_aa_.dimension( num_aa_types_in_file );
576 instance_states_2_file_states_ = -1;
577 file_states_2_instance_states_ = -1;
578 aa_types_for_file_states_ = -1;
579 num_file_states_for_aa_ = 0;
581 initialize_aa_for_state_array(); //apl borrowing functionality from wri
585 void PDNode::clean_up_after_reading_energies_from_file()
587 instance_states_2_file_states_.dimension(0);
588 file_states_2_instance_states_.dimension(0);
589 aa_types_for_file_states_.dimension(0);
590 aa_types_for_instance_states_.dimension(0);
591 num_file_states_for_aa_.dimension(0);
607 void PDNode::set_aa_for_file_state(int file_state, int aa )
609 if ( (unsigned int) aa > num_file_states_for_aa_.size() || aa <= 0)
611 std::cerr << "Error in interaction graph file: amino acid type out";
612 std::cerr << " of range on node: " << get_node_index() << " for file state ";
613 std::cerr << file_state << ": aa = " << aa << std::endl;
616 aa_types_for_file_states_( file_state ) = aa;
617 ++num_file_states_for_aa_( aa );
631 void PDNode::set_instance_state_correspondence
637 //apl Enforce bijection:
638 //apl Much easier to handle I/O when no to file-states map to a single
639 //apl instance state, and no two instance states map to a single file state.
640 //apl If a protocol creates two identical rotamers before reading the
641 //apl interaction graph file, then that protocol must also
642 //apl have generated the same identical rotamers before writing the
643 //apl interaction graph file.
644 if ( instance_states_2_file_states_( instance_state ) != -1
645 || file_states_2_instance_states_( state_from_file ) != -1 )
647 std::cerr << "Reading Interaction Graph from File: Bijection Failure" << std::endl;
648 std::cerr << "Node: " << get_node_index() << " instance_state " << instance_state;
649 std::cerr << "file_state: " << state_from_file << std::endl;
650 std::cerr << "First Correspondence: instance_states_2_file_states_( ";
651 std::cerr << instance_state << " ) = " << instance_states_2_file_states_( instance_state );
652 std::cerr << std::endl << "First Correspondence: file_states_2_instance_staets_( ";
653 std::cerr << state_from_file << " ) = " << file_states_2_instance_states_( state_from_file );
654 std::cerr << std::endl;
658 instance_states_2_file_states_( instance_state ) = state_from_file;
659 file_states_2_instance_states_( state_from_file ) = instance_state;
667 int PDNode::get_correspondence_for_state( int instance_state )
669 return instance_states_2_file_states_( instance_state );
676 int PDNode::get_num_rots_absent_from_file()
678 if ( instance_states_2_file_states_.size() == 0 )
680 //no correspondence found with input file
681 return get_num_states();
684 int count_absent = 0;
685 for (int ii = 1; ii <= get_num_states(); ++ii)
687 if (instance_states_2_file_states_(ii) == -1 )
700 void PDNode::get_absent_rots( FArray1_int & rots_absent )
702 if ( instance_states_2_file_states_.size() == 0 ) {
703 //no correspondence found with input file
704 for (int ii = 1; ii <= get_num_states(); ++ii) {
705 rots_absent(ii) = ii;
710 int count_absent = 0;
711 for (int ii = 1; ii <= get_num_states(); ++ii) {
712 if (instance_states_2_file_states_(ii) == -1 ) {
714 rots_absent( count_absent ) = ii;
720 int PDNode::get_num_states_in_file()
722 return num_states_in_file_;
729 int & PDNode::get_aatypes_for_file_states()
731 return aa_types_for_file_states_(1);
738 int & PDNode::get_aatypes_for_states()
740 return aa_types_for_instance_states_(1);
748 int & PDNode::get_num_file_states_for_aa()
750 return num_file_states_for_aa_(1);
758 int & PDNode::get_file_states_2_instance_states_array()
760 return file_states_2_instance_states_(1);
766 bool PDNode::get_node_corresponded_to_file_node()
768 return (instance_states_2_file_states_.size() != 0 );
791 get_pd_node(0)->get_num_states_for_aa_types(),
792 get_pd_node(1)->get_num_states_for_aa_types()
794 energies_updated_since_last_prep_for_simA_(
true )
796 force_all_aa_neighbors();
859 two_body_energies_.add(
860 get_pd_node(0)->get_sparse_mat_info_for_state(state1),
861 get_pd_node(1)->get_sparse_mat_info_for_state(state2),
862 edge_weight() * energy);
863 energies_updated_since_last_prep_for_simA_ =
true;
877 FArray2< core::PackerEnergy >
const & res_res_energy_array
880 for (
int ii = 1; ii <= get_num_states_for_node(0); ++ii ) {
882 ->get_sparse_mat_info_for_state( ii );
883 for (
int jj = 1; jj <= get_num_states_for_node(1); ++jj ) {
885 ->get_sparse_mat_info_for_state( jj );
887 two_body_energies_.add(
888 state1_sparse_info, state2_sparse_info,
889 edge_weight() * res_res_energy_array( jj, ii )
893 energies_updated_since_last_prep_for_simA_ =
true;
912 two_body_energies_.set(
913 get_pd_node(0)->get_sparse_mat_info_for_state(state1),
914 get_pd_node(1)->get_sparse_mat_info_for_state(state2),
915 edge_weight() * energy
917 energies_updated_since_last_prep_for_simA_ =
true;
935 two_body_energies_.set(
936 get_pd_node(0)->get_sparse_mat_info_for_state(state1),
937 get_pd_node(1)->get_sparse_mat_info_for_state(state2),
953 get_pd_node(0)->get_sparse_mat_info_for_state(state1),
954 get_pd_node(1)->get_sparse_mat_info_for_state(state2));
1018 int node_substituted = ( node_ind == get_node_index(0) ? 0 : 1);
1019 int node_not_substituted = ! node_substituted;
1021 int nodes_curr_states[2];
1024 nodes_curr_states[ node_substituted ] = new_state;
1025 nodes_curr_states_sparse_info[ node_substituted ] = new_state_sparse_info;
1027 nodes_curr_states[ node_not_substituted ] =
1028 get_pd_node( node_not_substituted )->get_current_state();
1029 nodes_curr_states_sparse_info[ node_not_substituted ] =
1030 get_pd_node( node_not_substituted )->
1031 get_sparse_mat_info_for_curr_state();
1033 bool one_node_in_zero_state =
1034 ( nodes_curr_states[0] == 0 || nodes_curr_states[1] == 0 );
1036 if ( one_node_in_zero_state ) {
1037 curr_state_energy_ = 0;
1039 curr_state_energy_ = two_body_energies_.get(
1040 nodes_curr_states_sparse_info[0],
1041 nodes_curr_states_sparse_info[1]);
1043 new_energy = curr_state_energy_;
1045 get_pd_node( node_not_substituted )->
1046 acknowledge_neighbors_state_substitution(
1047 get_edges_position_in_nodes_edge_vector( node_not_substituted ),
1050 new_state_sparse_info
1061 int node_not_substituted = ! node_substituted;
1069 acknowledge_neighbors_state_substitution(
1084 FArray2D_int
const &
1107 return sizeof (
PDEdge );
1113 unsigned int total_memory = 0;
1117 return total_memory;
1120 ObjexxFCL::FArray2D< core::PackerEnergy >
1168 void PDEdge::read_edge_energies_from_file( std::ifstream & infile )
1170 std::cerr << "Reading Edge: " << get_node_index(0) << " " << get_node_index(1) << std::endl;
1171 int node1_num_states_in_file = get_pd_node(0)->get_num_states_in_file();
1172 int node2_num_states_in_file = get_pd_node(1)->get_num_states_in_file();
1174 FArray1A_int node1_file_states_2_instance_states(
1175 get_pd_node(0)->get_file_states_2_instance_states_array(),
1176 node1_num_states_in_file);
1178 FArray1A_int node2_file_states_2_instance_states(
1179 get_pd_node(1)->get_file_states_2_instance_states_array(),
1180 node2_num_states_in_file);
1182 FArray1A_int node1_aatypes_file_states(
1183 get_pd_node(0)->get_aatypes_for_file_states(),
1184 node1_num_states_in_file);
1186 FArray1A_int node2_aatypes_file_states(
1187 get_pd_node(1)->get_aatypes_for_file_states(),
1188 node2_num_states_in_file);
1190 int num_file_aa = get_pdig_owner()->get_num_file_aatypes();
1191 int num_aa = get_pdig_owner()->get_num_aatypes();
1193 FArray1A_int node1_num_file_states_for_aa(
1194 get_pd_node(0)->get_num_file_states_for_aa(),
1197 FArray1A_int node2_num_file_states_for_aa(
1198 get_pd_node(1)->get_num_file_states_for_aa(),
1201 int sqr_file_aa = num_file_aa * num_file_aa;
1202 FArray2D_bool aa_neighbors( num_aa, num_aa, false );
1203 bool* aa_neighbor_buffer = new bool[ sqr_file_aa ];
1204 for (int ii = 0; ii <= sqr_file_aa; ++ii)
1205 aa_neighbor_buffer[ii] = false;
1207 //std::cerr << "square file aa: " << sqr_file_aa << std::endl;
1208 infile.read( (char*) aa_neighbor_buffer, sizeof( bool ) * sqr_file_aa );
1209 //int num_bools_read = infile.gcount();
1210 //assert( num_bools_read == sizeof( bool ) * sqr_file_aa );
1212 int buffer_index = 0;
1213 int num_pair_energies = 0;
1214 for (int ii = 1; ii <= num_file_aa; ++ii) {
1215 for (int jj = 1; jj <= num_file_aa; ++jj) {
1216 aa_neighbors(jj, ii) = aa_neighbor_buffer[ buffer_index ];
1217 //std::cerr << aa_neighbor_buffer[ buffer_index ];
1218 if ( aa_neighbor_buffer[ buffer_index ] ) {
1219 num_pair_energies += node1_num_file_states_for_aa(ii) *
1220 node2_num_file_states_for_aa( jj );
1225 //std::cerr << std::endl;
1228 //std::cerr << "num pair energies: " << num_pair_energies << std::endl;
1230 two_body_energies_.set_sparse_aa_info( aa_neighbors );
1232 float * energies_buffer = new float [ num_pair_energies ];
1234 infile.read( (char*) energies_buffer, sizeof( float ) * num_pair_energies );
1235 //int read_num_floats = infile.gcount();
1238 for (int ii = 1; ii <= node1_num_states_in_file; ++ii) {
1239 int ii_aa = node1_aatypes_file_states( ii );
1240 int ii_instance_state = node1_file_states_2_instance_states( ii );
1241 for (int jj = 1; jj <= node2_num_states_in_file; ++jj) {
1242 int jj_aa = node2_aatypes_file_states( jj );
1243 int jj_instance_state = node2_file_states_2_instance_states( jj );
1245 if ( ! aa_neighbors(jj_aa, ii_aa ) ) continue;
1247 assert( buffer_index < num_pair_energies );
1248 float energy = energies_buffer[ buffer_index ];
1251 if ( ii_instance_state == -1 || jj_instance_state == -1 ) continue;
1253 two_body_energies_.set(
1254 get_pd_node(0)->get_sparse_mat_info_for_state(ii_instance_state),
1255 get_pd_node(1)->get_sparse_mat_info_for_state(jj_instance_state),
1260 delete [] aa_neighbor_buffer;
1261 delete [] energies_buffer;
1284 PDEdge::skip_over_edge_energies_from_file
1286 std::ifstream & infile,
1288 FArray1_int & node1_num_file_states_for_aa,
1289 FArray1_int & node2_num_file_states_for_aa
1292 int sqr_file_aa = num_file_aa * num_file_aa;
1293 bool* aa_neighbor_buffer = new bool[ sqr_file_aa ];
1295 infile.read( (char*) aa_neighbor_buffer, sizeof(bool) * sqr_file_aa);
1297 int buffer_index = 0;
1298 int num_pair_energies = 0;
1299 for (int ii = 1; ii <= num_file_aa; ++ii) {
1300 for (int jj = 1; jj <= num_file_aa; ++jj) {
1301 if ( aa_neighbor_buffer[ buffer_index ] ) {
1302 num_pair_energies += node1_num_file_states_for_aa( ii ) *
1303 node2_num_file_states_for_aa( jj );
1310 infile.seekg( sizeof( float ) * num_pair_energies, std::ios::cur );
1311 delete [] aa_neighbor_buffer;
1321 void PDEdge::write_edge_energies_to_file( std::ofstream & outfile )
1323 FArray1A_int node1_aatypes_for_state(
1324 get_pd_node(0)->get_aatypes_for_states(),
1325 get_num_states_for_node(0) );
1327 FArray1A_int node2_aatypes_for_state(
1328 get_pd_node(1)->get_aatypes_for_states(),
1329 get_num_states_for_node(1) );
1331 //write the aa-neighbor information
1332 int num_aa = get_pdig_owner()->get_num_aatypes();
1333 int sqr_num_aa = num_aa * num_aa;
1334 bool * aa_neighbor_buffer = new bool[ sqr_num_aa ];
1335 int buffer_index = 0;
1337 for (int ii = 1; ii <= num_aa; ++ii) {
1338 for (int jj = 1; jj <= num_aa; ++jj) {
1339 if ( two_body_energies_.get_sparse_aa_info(ii, jj) ) {
1340 aa_neighbor_buffer[ buffer_index ] = true;
1342 aa_neighbor_buffer[ buffer_index ] = false;
1344 //std::cerr << aa_neighbor_buffer[ buffer_index ];
1347 //std::cerr << std::endl;
1349 outfile.write( (char*) aa_neighbor_buffer, sizeof( bool ) * sqr_num_aa );
1351 float * energy_buffer = new float[ two_body_energies_.get_table_size() ];
1353 for (int ii = 1; ii <= get_num_states_for_node(0); ++ii ) {
1354 int ii_aa = node1_aatypes_for_state( ii );
1355 for (int jj = 1; jj <= get_num_states_for_node(1); ++jj ) {
1356 int jj_aa = node2_aatypes_for_state( jj );
1357 if ( ! two_body_energies_.get_sparse_aa_info(ii_aa, jj_aa) ) continue;
1359 energy_buffer[ buffer_index ] = get_two_body_energy( ii, jj );
1364 outfile.write( (char*) energy_buffer, sizeof(float) * two_body_energies_.get_table_size() );
1365 std::cerr << "Writing edge: " << get_node_index(0) << " " << get_node_index(1);
1366 std::cerr << "; num_energies: " << two_body_energies_.get_table_size() << std::endl;
1367 delete [] aa_neighbor_buffer;
1368 delete [] energy_buffer;
1441 num_aa_types_( -1 ), num_commits_since_last_update_(0),
1442 total_energy_current_state_assignment_(0),
1443 total_energy_alternate_state_assignment_(0),
1444 node_considering_alt_state_( -1 )
1453 Size max_nresgroups = 0;
1456 if ( ii_nresgroups > max_nresgroups ) max_nresgroups = ii_nresgroups;
1469 std::vector< int > aatype_for_state( ii_num_states + 1, 0 );
1470 Size curr_resgroup = 1;
1471 Size count_for_resgroup = 1;
1473 for (
uint jj = 1; jj <= ii_num_states; ++jj ) {
1475 aatype_for_state[ jj ] = curr_resgroup;
1476 ++count_for_resgroup;
1480 count_for_resgroup = 1;
1481 if ( curr_resgroup > ii_nresgroups )
break;
1586 float & delta_energy,
1587 float & prev_energy_for_node
1590 node_considering_alt_state_ = node_ind;
1591 delta_energy = get_pd_node( node_ind )->
1592 project_deltaE_for_substitution( new_state, prev_energy_for_node );
1595 total_energy_alternate_state_assignment_ =
1596 total_energy_current_state_assignment_ + delta_energy;
1650 get_one_body_energy_current_state();
1659 ((
PDEdge*) *iter)->get_current_two_body_energy();
1674 sum += ((
PDEdge*) *iter)->get_two_body_table_size();
1682 unsigned int total_memory = 0;
1685 return total_memory;
1690 std::cerr <<
"Curr States: ";
1693 std::cerr <<
"(" << ii <<
", ";
1697 std::cerr << std::endl;
1703 void PDInteractionGraph::prepare_to_read_energies_from_file()
1705 instance_node_2_file_node_.dimension( get_num_nodes() );
1706 instance_node_2_file_node_ = -1;
1711 void PDInteractionGraph::declare_finished_reading_from_file()
1713 instance_node_2_file_node_.dimension( 0 );
1714 file_node_2_instance_node_.dimension( 0 );
1715 aa_types_for_states_on_file_nodes_.dimension( 0 );
1718 for (int ii = 1; ii <= get_num_nodes(); ++ii )
1720 get_pd_node(ii)->clean_up_after_reading_energies_from_file();
1727 void PDInteractionGraph::set_num_file_aatypes( int num_file_aatypes )
1729 num_file_aa_types_ = num_file_aatypes;
1734 int PDInteractionGraph::get_num_file_aatypes()
1736 return num_file_aa_types_;
1742 void PDInteractionGraph::set_num_nodes_in_file( int num_nodes_in_file )
1744 num_nodes_in_file_ = num_nodes_in_file;
1745 file_node_2_instance_node_.dimension( num_nodes_in_file );
1746 aa_types_for_states_on_file_nodes_.dimension( num_nodes_in_file );
1747 num_file_states_for_aa_for_node_.dimension( num_nodes_in_file );
1749 file_node_2_instance_node_ = -1;
1757 void PDInteractionGraph::set_node_correspondence
1763 file_node_2_instance_node_( file_node ) = instance_node;
1764 instance_node_2_file_node_( instance_node ) = file_node;
1780 void PDInteractionGraph::set_num_states_for_file_node
1786 if ( file_node_2_instance_node_( node ) == -1 ) {
1787 aa_types_for_states_on_file_nodes_( node ).dimension( num_file_states );
1788 num_file_states_for_aa_for_node_( node ).dimension( num_file_aa_types_ );
1789 num_file_states_for_aa_for_node_( node ) = 0;
1791 int instance_node = file_node_2_instance_node_( node );
1792 get_pd_node(instance_node)->
1793 prepare_to_read_energies_from_file( num_file_states );
1803 void PDInteractionGraph::set_aa_for_file_node_state
1810 int instance_node = file_node_2_instance_node_( node );
1811 if ( instance_node == -1 ) {
1812 aa_types_for_states_on_file_nodes_( node )( file_state ) = state_aa;
1813 ++num_file_states_for_aa_for_node_( node )(state_aa);
1815 get_pd_node( instance_node )->set_aa_for_file_state(file_state, state_aa);
1825 void PDInteractionGraph::set_correspondence_for_state(int node, int state, int file_state)
1827 get_pd_node(node)->set_instance_state_correspondence( state, file_state );
1835 int PDInteractionGraph::get_correspondence_for_state(int node, int state )
1837 return get_pd_node(node)->get_correspondence_for_state( state );
1844 bool PDInteractionGraph::get_node_corresponded_to_file_node( int node )
1846 return get_pd_node(node)->get_node_corresponded_to_file_node( );
1854 int PDInteractionGraph::get_num_rots_absent_from_file(int node)
1856 return get_pd_node(node)->get_num_rots_absent_from_file();
1866 void PDInteractionGraph::get_absent_rots(int node, FArray1_int & rots_absent )
1868 get_pd_node(node)->get_absent_rots( rots_absent );
1889 void PDInteractionGraph::read_edge_energies_from_file( std::ifstream & infile )
1892 infile.read( (char*) &num_edges,4);
1894 for (int ii = 1; ii <= num_edges; ++ii)
1897 infile.read( (char*) & node1, 4);
1898 infile.read( (char*) & node2, 4 );
1900 int instance_node1 = file_node_2_instance_node_( node1 );
1901 int instance_node2 = file_node_2_instance_node_( node2 );
1902 if ( instance_node1 == -1 || instance_node2 == -1 )
1903 { //skip over the energies for this edge
1904 if (instance_node1 == -1 ) {
1905 FArray1A_int node1_num_states_for_aa(
1906 num_file_states_for_aa_for_node_( node1 ), num_file_aa_types_);
1908 if (instance_node2 == -1) {
1909 FArray1A_int node2_num_states_for_aa(
1910 num_file_states_for_aa_for_node_( node2 ), num_file_aa_types_);
1913 PDEdge::skip_over_edge_energies_from_file( infile,
1915 node1_num_states_for_aa, node2_num_states_for_aa);
1917 FArray1A_int node2_num_states_for_aa(
1918 get_pd_node( instance_node2 )
1919 ->get_num_file_states_for_aa(), num_file_aa_types_ );
1921 PDEdge::skip_over_edge_energies_from_file( infile,
1923 node1_num_states_for_aa, node2_num_states_for_aa);
1926 FArray1A_int node1_num_states_for_aa(
1927 get_pd_node( instance_node1 )
1928 ->get_num_file_states_for_aa(), num_file_aa_types_);
1930 FArray1A_int node2_num_states_for_aa(
1931 num_file_states_for_aa_for_node_( node2 ), num_file_aa_types_);
1933 PDEdge::skip_over_edge_energies_from_file( infile,
1935 node1_num_states_for_aa, node2_num_states_for_aa);
1939 add_edge( instance_node1, instance_node2 );
1940 PDEdge* new_edge = (PDEdge*) find_edge( instance_node1, instance_node2);
1942 new_edge->read_edge_energies_from_file( infile );
1956 void PDInteractionGraph::write_edge_energies_to_file( std::ofstream & outfile )
1958 for (int ii = 1; ii <= get_num_nodes(); ++ii) {
1959 get_pd_node(ii)->prepare_to_write_to_file();
1962 int num_edges = get_num_edges(); //O(N) size method
1963 outfile.write( (char*) (&num_edges), 4);
1964 for ( std::list< EdgeBase* >::iterator edge_iter = get_edge_list_begin();
1965 edge_iter != get_edge_list_end(); ++edge_iter) {
1966 int first_node_ind = (*edge_iter)->get_first_node_ind();
1967 int second_node_ind = (*edge_iter)->get_second_node_ind();
1968 outfile.write( (char*) & first_node_ind, 4);
1969 outfile.write( (char*) & second_node_ind, 4);
1970 ((PDEdge*) (*edge_iter) )->write_edge_energies_to_file( outfile );
1973 for (int ii = 1; ii <= get_num_nodes(); ++ii) {
1974 get_pd_node(ii)->clean_up_after_writing_to_file();
2006 int first_node_ind = (*edge_iter)->get_first_node_ind();
2007 int second_node_ind = (*edge_iter)->get_second_node_ind();
2011 esum += ((
PDEdge*) (*edge_iter))->get_current_two_body_energy();
2027 unsigned int total_memory = 0;
2029 return total_memory;
2047 ObjexxFCL::FArray2D< core::PackerEnergy >
2065 PDNode* new_node =
new PDNode(
this, node_index, num_states);
2066 assert( new_node != NULL );
2076 return new PDEdge(
this, index1, index2);
2091 int alternate_state,
2092 float & deltaE_unweighted,
2093 float & prevE_unweighted,
2094 float & deltaE_weighted,
2095 float & prevE_weighted,
2096 FArray2D< core::PackerEnergy >
const & weights
2127 prevE_weighted = curr_total_energy_weighted;
2128 deltaE_weighted = alternate_total_energy_weighted - curr_total_energy_weighted;
2137 int get_other_index(
const EdgeBase* edge_base,
const int index) {
2138 if( index == edge_base->get_first_node_ind() ) {
2139 return edge_base->get_second_node_ind();
2141 else if( index == edge_base->get_second_node_ind() ) {
2142 return edge_base->get_first_node_ind();
2146 utility_exit_with_message(
"et_other_index(const EdgeBase* edge_base, const int index) failed");
2195 float & deltaE_unweighted,
2196 float & prevE_unweighted,
2197 float & deltaE_weighted,
2198 float & prevE_weighted,
2199 const FArray2D< core::PackerEnergy >& weights