39 #include <basic/options/util.hh>
40 #include <basic/options/after_opts.hh>
41 #include <basic/options/option_macros.hh>
42 #include <basic/options/keys/OptionKeys.hh>
43 #include <basic/options/keys/ddg.OptionKeys.gen.hh>
44 #include <basic/options/keys/in.OptionKeys.gen.hh>
45 #include <basic/options/keys/score.OptionKeys.gen.hh>
46 #include <basic/options/keys/packing.OptionKeys.gen.hh>
48 #include <basic/database/open.hh>
53 #include <numeric/xyzVector.hh>
69 #include <basic/Tracer.hh>
72 #include <utility/vector0.hh>
73 #include <utility/vector1.hh>
74 #include <ObjexxFCL/format.hh>
79 static basic::Tracer
TR(
"pilot_apps.fix_bb_monomer_ddg");
85 using namespace scoring;
94 ddgs delta_e_components,
98 std::ofstream ddg_output(ddg_out.c_str(), std::ios_base::app);
100 TR <<
"having trouble opening output file for dumping predicted ddgs"
101 << ddg_out << std::endl;
102 utility::exit(EXIT_FAILURE, __FILE__, __LINE__);
111 if(label.compare(
"") != 0){
112 using namespace ObjexxFCL::fmt;
113 ddg_output <<
"ddG: " << label <<
" " << F(9,3,total_ddgs) <<
" ";
114 for(
Size m=1;m<=delta_e_components.size();m++){
115 ddg_output << F(9,3,delta_e_components[m]) <<
" ";
120 ddg_output << std::endl;
125 std::ifstream inputstream;
126 inputstream.open(filename.c_str());
127 if(inputstream.is_open()){
129 inputstream >> total_keyword;
130 assert(total_keyword.compare(
"total") == 0);
132 inputstream >> total;
133 while(!inputstream.eof()){
136 inputstream >> num_mutations;
137 while(num_mutations > 0){
138 char wt;
int resnum;
char mut;
139 inputstream >> wt >> resnum >> mut;
140 TR <<
"wt is " << wt <<
" resnum is " << resnum <<
" and mut is " << mut << std::endl;
143 current_mutation[resnum]=mutation;
144 num_mutations--; total--;
146 TR <<
"end reading mutations for this" << std::endl;
147 if(num_mutations < 0){
148 TR.Error <<
"number of mutations mismatch! num_mutations < 0" << std::endl;
151 res_to_mut.push_back(current_mutation);
155 TR.Error <<
"total number of mutations mismatch! total < 0" << std::endl;
164 using namespace pose;
165 using namespace scoring;
166 using namespace conformation;
168 using namespace basic::options;
169 using namespace basic::options::OptionKeys;
170 using namespace core::pack::task;
171 using namespace protocols::moves;
175 OPT(ddg::weight_file);
176 OPT(ddg::iterations);
177 OPT(ddg::debug_output);
180 OPT(ddg::interface_ddg);
181 OPT(ddg::opt_radius);
193 std::string weight_file = option[ OptionKeys::ddg::weight_file ]();
194 basic::options::option[ score::fa_max_dis ](9.0);
198 if(basic::options::option[OptionKeys::ddg::minimization_scorefunction].user() && basic::options::option[OptionKeys::ddg::minimization_patch].user()){
200 basic::options::option[OptionKeys::ddg::minimization_patch]());
201 }
else if(basic::options::option[OptionKeys::ddg::minimization_scorefunction].user()){
205 basic::database::full_name(
"scoring/weights/score12.wts_patch"));
208 int num_iterations = option[ OptionKeys::ddg::iterations ]();
209 bool opt_nbrs =
false;
211 if(basic::options::option[ OptionKeys::ddg::opt_radius].user()){
213 cutoff = basic::options::option[ OptionKeys::ddg::opt_radius ]();
214 }
else if(basic::options::option[OptionKeys::ddg::local_opt_only]()){
221 bool debug_output = option[ OptionKeys::ddg::debug_output ]();
223 TR <<
"weights being used: " <<
224 score_structure_scorefxn->weights() <<
"\n";
228 bool dump_pdbs = option[ OptionKeys::ddg::dump_pdbs ]();
231 std::string ddg_out = option[ OptionKeys::ddg::out ]();
235 bool interface_ddg = option[ OptionKeys::ddg::interface_ddg ]();
238 bool min_cst = option[OptionKeys::ddg::min_cst]();
241 bool mean = option[OptionKeys::ddg::mean]();
242 bool min = option[OptionKeys::ddg::min]();
244 ObjexxFCL::FArray2D<double> wt_scores(20,num_iterations);
254 ddg::ddGMover get_wt_score(score_structure_scorefxn,minimize_sfxn,all_unk);
256 if(basic::options::option[OptionKeys::ddg::mut_only].user() && basic::options::option[OptionKeys::ddg::mut_only]()){
273 get_wt_score.
apply(pose);
277 if(basic::options::option[OptionKeys::ddg::wt_only].user() && basic::options::option[OptionKeys::ddg::wt_only]()){
278 std::cout <<
"optimizing only wt structure. exiting" << std::endl;
282 if(option[ OptionKeys::ddg::mut_file ].user()){
283 TR <<
"reading in mutfile" << std::endl;
287 TR <<
"size of res_to_mut is: " << res_to_mut.size() << std::endl;
289 for(
Size i=1; i <= res_to_mut.size(); i++){
291 bool mutation_defined =
false;
292 for(
Size m =1; m<= residues_to_mutate.size(); m++){
294 mutation_defined=
true;
297 if(mutation_defined){
303 !(basic::options::option[OptionKeys::ddg::mut_only].user() && basic::options::option[OptionKeys::ddg::mut_only]())){
304 TR <<
"testing if wt calc is complete. should be complete!" << std::endl;
312 point_mutation.
apply(pose);
313 delta_delta_G_label.push_back(point_mutation.
mutation_label(pose));
314 TR <<
"mutation label for this round is " << point_mutation.
mutation_label(pose) << std::endl;
321 total_ddgs.push_back(point_mutation.
ddG());
326 point_mutation.
ddG());
332 if(option[packing::resfile].user()){
335 storage_task->initialize_from_command_line();
337 storage_task->or_include_current(
true);
339 for(
Size i =1;i<=pose.total_residue();i++){
340 if(storage_task->design_residue(i)){
342 aa_end(storage_task->residue_task(i).allowed_residue_types_end());
343 aa_iter != aa_end; ++aa_iter){
345 residues_to_mutate[i]=((*aa_iter)->aa());
353 TR <<
"testing if wt calc is complete. should be complete!" << std::endl;
361 point_mutation.
apply(pose);
362 delta_delta_G_label.push_back(point_mutation.
mutation_label(pose));
369 total_ddgs.push_back(point_mutation.
ddG());
375 point_mutation.
ddG());
377 std::cout <<
"cannot output ddgs. either mut or wt arrays are incomplete\ni hope you don't mind!\n" << std::endl;
390 using namespace core;
391 using namespace core::conformation;
392 using namespace core::chemical;
399 protein_interface.
print(pose);
402 for(
Size i =1;i<=pose.total_residue();i++){
404 TR <<
"[DEBUG]:" << i <<
" is in the interface " << std::endl;
409 for(
Size i =1;i<=pose.total_residue();i++){
411 for(
Size j =1; j <= 20 ; j++){
412 residues_to_mutate = all_unk;
414 if(curr_aa != pose.aa(i) && (pose.aa(i) !=
aa_unk) ){
415 residues_to_mutate[i]=curr_aa;
416 ddg::ddGMover interface_mutation(score_structure_scorefxn,minimize_sfxn,residues_to_mutate);
419 interface_mutation.
set_min(min);
422 TR <<
"testing if wt calc is complete. should be complete!" << std::endl;
427 if(dump_pdbs) interface_mutation.
dump_pdbs(dump_pdbs);
428 if(debug_output) interface_mutation.
debug_output(debug_output);
431 interface_mutation.
apply(pose);
432 delta_delta_G_label.push_back(interface_mutation.
mutation_label(pose));
433 TR <<
"mutation label for this round is " << interface_mutation.
mutation_label(pose) << std::endl;
439 total_ddgs.push_back(interface_mutation.
ddG());
444 interface_mutation.
ddG());
445 TR <<
"interface mutation is complete and ddg is: " << interface_mutation.
ddG() << std::endl;