28 #include <basic/Tracer.hh>
36 #include <basic/options/option.hh>
37 #include <basic/options/keys/rotamerdump.OptionKeys.gen.hh>
39 #include <utility/string_util.hh>
45 #include <utility/vector0.hh>
46 #include <utility/vector1.hh>
50 namespace RotamerDump {
52 static basic::Tracer
RotamerTracer(
"protocols.RotamerDump.RotamerDumpMover");
56 task_factory_(task_factory), score_function_(score_function)
72 score_function_->setup_for_packing(pose, packer_task->repacking_residues(), packer_task->designing_residues());
76 rotamer_sets->set_task(packer_task);
77 rotamer_sets->build_rotamers(pose,*
score_function_,packer_neighbor_graph);
81 RotamerTracer <<
"built " << rotamer_sets->nrotamers() <<
" rotamers at " <<rotamer_sets->nmoltenres() <<
" positions" <<std::endl;
84 rotamer_sets->compute_energies(pose,*
score_function_,packer_neighbor_graph,ig);
86 RotamerTracer <<
"IG: " <<ig->getTotalMemoryUsage() <<
" bytes"<<std::endl;
90 std::list<std::string> job_data;
92 if(basic::options::option[basic::options::OptionKeys::rotamerdump::one_body].user())
94 RotamerTracer <<
"Generating one body energy table"<<std::endl;
99 RotamerTracer <<
"Generating XYZ rotamer table"<<std::endl;
102 if(basic::options::option[basic::options::OptionKeys::rotamerdump::two_body].user())
104 RotamerTracer <<
"Generating two body energy table"<<std::endl;
107 if(basic::options::option[basic::options::OptionKeys::rotamerdump::annealer].user())
109 RotamerTracer <<
"Running Annealer" <<std::endl;
112 job->add_strings(job_data);
127 for(
core::Size node_id = 1; node_id <= ig_size; ++node_id)
129 core::Size residue_id = rotamer_sets->moltenres_2_resid(node_id);
130 std::string residue_id_string = utility::to_string<core::Size>(residue_id);
133 core::Size node_states = ig->get_num_states_for_node(node_id);
134 for(
core::Size state_id = 1; state_id <= node_states; ++state_id)
136 float one_body_energy = ig->get_one_body_energy_for_node_state(node_id,state_id);
137 std::string one_body_energy_string = utility::to_string<float>(one_body_energy);
143 std::string residue_name(current_residue->name3());
144 std::string state_id_string = utility::to_string<core::Size>(state_id);
147 data.append(
" ("+residue_id_string+
","+residue_name+
","+state_id_string+
","+one_body_energy_string+
")");
151 return table_type+
" "+utility::to_string<core::Size>(elements)+
" "+data;
167 utility_exit_with_message(
"Interaction graph is not pre-computed");
170 for(
core::Size node_1_id = 1; node_1_id <= ig_size; ++node_1_id)
172 core::Size residue_1_id = rotamer_sets->moltenres_2_resid(node_1_id);
173 std::string residue_1_id_string = utility::to_string<core::Size>(residue_1_id);
177 for(
core::Size node_2_id = node_1_id+2; node_2_id <= ig_size; ++node_2_id)
179 core::Size residue_2_id = rotamer_sets->moltenres_2_resid(node_2_id);
180 std::string residue_2_id_string = utility::to_string<core::Size>(residue_2_id);
184 core::Size const num_states_1(ig->get_num_states_for_node(node_1_id));
185 core::Size const num_states_2(ig->get_num_states_for_node(node_2_id));
186 if(!ig->get_edge_exists(node_1_id,node_2_id))
191 for(
core::Size node_1_state = 1; node_1_state <= num_states_1;++node_1_state)
193 std::string node_1_state_string = utility::to_string<core::Size>(node_1_state);
199 for(
core::Size node_2_state = 1; node_2_state <= num_states_2;++node_2_state)
205 std::string node_2_state_string = utility::to_string<core::Size>(node_2_state);
206 float energy = p_ig->get_two_body_energy_for_edge(node_1_id,node_2_id,node_1_state,node_2_state);
209 std::string energy_string = utility::to_string<float>(energy);
210 data.append(
" ("+residue_1_id_string+
","+node_1_state_string+
","+residue_1_name+
","+residue_2_id_string+
","+node_2_state_string+
","+residue_2_name+
","+energy_string+
")" );
217 return table_type+
" "+utility::to_string<core::Size>(elements)+
" "+data;
227 core::Size n_molten_res =rotamer_sets->nmoltenres();
228 for(
core::Size molten_res =1; molten_res <= n_molten_res;++molten_res)
231 core::Size n_rotamers = rotamer_set->num_rotamers();
232 std::string res_id_string = utility::to_string<core::Size>(rotamer_sets->moltenres_2_resid(molten_res));
234 for(
core::Size rotamer_id =1; rotamer_id <= n_rotamers; ++rotamer_id)
236 std::string rotamer_id_string = utility::to_string<core::Size>(rotamer_id);
239 std::string residue_name(current_residue->name3());
241 core::Size n_atoms = current_residue->natoms();
242 for(
core::Size atom_id = 1; atom_id <= n_atoms;++atom_id)
244 std::string atom_name = utility::trim(current_residue->atom_name(atom_id));
246 core::Vector xyz_coords = current_residue->xyz(atom_id);
247 std::string x_string = utility::to_string<core::Real>(xyz_coords.x());
248 std::string y_string = utility::to_string<core::Real>(xyz_coords.y());
249 std::string z_string = utility::to_string<core::Real>(xyz_coords.z());
251 data.append(
" ("+res_id_string+
","+rotamer_id_string+
","+residue_name+
","+atom_name+
","+x_string+
","+y_string+
","+z_string+
")");
256 return table_type+
" "+utility::to_string<core::Size>(elements)+
" "+data;
267 ObjexxFCL::FArray1D_int current_rot_index(pose.
total_residue(),0);
269 ObjexxFCL::FArray1D<float> rot_freq(ig->get_num_total_states(),0.0);
270 ObjexxFCL::FArray1D_int bestrotamer_at_seqpos(pose.
total_residue());
272 float bestenergy = 0;
276 core::Size n_molten_res =rotamer_sets->nmoltenres();
277 for(
core::Size molten_res =1; molten_res <= n_molten_res;++molten_res)
279 core::Size residue_id = rotamer_sets->moltenres_2_resid(molten_res);
280 std::string residue_id_string = utility::to_string<core::Size>(residue_id);
282 core::Size selected_rotamer = rotamer_sets->rotid_on_moltenresidue(bestrotamer_at_seqpos(residue_id));
283 std::string selected_rotamer_string = utility::to_string<core::Size>(selected_rotamer);
286 std::string selected_residue_name(selected_residue->name3());
288 data.append(
" ("+residue_id_string+
","+selected_rotamer_string+
","+selected_residue_name+
")");
291 return table_type+
" "+utility::to_string<core::Size>(elements)+
" "+data;
297 return "RotamerDumpMover";