Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
LoopBuildMover.cc
Go to the documentation of this file.
1 
3 
4 #include <basic/Tracer.hh>
6 #include <core/pose/util.hh>
7 
8 
9 #include <utility/exit.hh>
10 
12 
16 
18 #include <protocols/jd2/Job.hh>
20 
21 #include <basic/options/keys/out.OptionKeys.gen.hh>
22 #include <basic/options/keys/loops.OptionKeys.gen.hh>
23 #include <basic/options/keys/in.OptionKeys.gen.hh>
24 #include <basic/options/keys/edensity.OptionKeys.gen.hh>
25 
26 #include <basic/resource_manager/ResourceManager.hh>
27 #include <basic/resource_manager/util.hh>
28 
30 
33 #include <utility/vector1.hh>
34 #include <basic/options/option.hh>
35 
36 #include <protocols/loops/util.hh>
37 #include <protocols/loops/Loops.hh>
39 
41 #include <basic/options/keys/symmetry.OptionKeys.gen.hh>
42 
44 
45 #ifdef WIN32
46  #include <ctime>
47 #endif
48 
49 namespace protocols{
50 namespace loop_build{
51 
52 
54  loop_relax_mover_( loop_relax_mover)
55 {}
56 
57 
59 
61  bool psipred_ss2_ok = loops::set_secstruct_from_psipred_ss2( pose );
62  if ( !psipred_ss2_ok ) {
63  std::string dssp_name( basic::options::option[ basic::options::OptionKeys::in::file::dssp ]().name() );
64  bool dssp_ok = loops::set_secstruct_from_dssp(pose, dssp_name);
65  if ( !dssp_ok ) {
67  }
68  }
69 
70  // symmetrize start pose & loopfile
71  if ( basic::options::option[ basic::options::OptionKeys::symmetry::symmetry_definition ].user() ) {
73  pre_mover.apply( pose );
74  }
75 
76  // bit of a hack for looprelax-into-density
77  // set pose for density scoring if a map was input
78  // (potentially) dock map into density -- do this here so we only need to
79  // dock the pose once
80  if ( basic::options::option[ basic::options::OptionKeys::edensity::mapfile ].user() ) {
82  pre_mover.apply( pose );
83  }
84 
85  core::pose::Pose native_pose;
86  if ( basic::options::option[ basic::options::OptionKeys::in::file::native ].user() ) {
88  native_pose, basic::options::option[ basic::options::OptionKeys::in::file::native ]()
89  );
90  core::pose::set_ss_from_phipsi( native_pose );
91  } else {
92  native_pose = pose;
93  }
94 
97  evaluator->add_evaluation(
98  new simple_filters::SelectRmsdEvaluator( native_pose, "_native" )
99  );
100 
101  basic::Tracer TR("protocols.loop_build.LoopBuildMover");
102 
103  TR << "Annotated sequence of pose: "
104  << pose.annotated_sequence(true) << std::endl;
105 
106  std::string const refine ( basic::options::option[ basic::options::OptionKeys::loops::refine ]() );
107  std::string const remodel ( basic::options::option[ basic::options::OptionKeys::loops::remodel ]() );
108  bool const keep_time ( basic::options::option[ basic::options::OptionKeys::loops::timer ]() );
110  std::string curr_job_tag = job->input_tag();
111  core::Size curr_nstruct = job->nstruct_index();
112  clock_t starttime = clock();
113 
114  loop_relax_mover_.set_current_tag(curr_job_tag);
115 
116  // add density wts from cmd line to looprelax scorefunctions
117  if ( basic::options::option[ basic::options::OptionKeys::edensity::mapfile ].user() ) {
122  loop_relax_mover_.scorefxns( lr_cen_scorefxn, lr_fa_scorefxn );
123  }
124 
125  loop_relax_mover_.apply( pose );
126 
127  //////////////////////////////////////////////////////////////////////////////
128  ////
129  //// Filter
130  ////
131  core::Real final_score( 0.0 );
132  using std::string;
135  pose, std::string("final_looprelax_score"), final_score
136  )
137  ) {
138  if ( basic::options::option[ basic::options::OptionKeys::loops::final_score_filter ].user() &&
139  final_score > basic::options::option[ basic::options::OptionKeys::loops::final_score_filter ]()
140  ) {
141  TR.Debug << "FailedFilter " << final_score << " > "
142  << basic::options::option[ basic::options::OptionKeys::loops::final_score_filter ]() << std::endl;
143  return;
144  }
145  }
146 
147  /////////////////////////////////////////////////////////////////////////////
148  ////
149  //// Output
150  ////
151 
152  if ( ! basic::options::option[ basic::options::OptionKeys::out::file::silent ].user() ) {
153 
154  // if closure failed don't output
155  if ( remodel == "perturb_kic" ) {
157  TR << "Initial kinematic closure failed. Not outputting."
158  << std::endl;
159  return;
160  }
161  }
163  if ( remodel != "no" ) {
164 
165  core::Real cen_looprms=0.0;
166  getPoseExtraScores( pose, "cen_looprms", cen_looprms );
167  job->add_string_real_pair("loop_cenrms ",cen_looprms );
168  // mirror to tracer
169  TR << "loop_cenrms: " << cen_looprms << std::endl;
170  }
171  if ( refine != "no" ) {
172  core::Real final_looprms=0.0;
173  core::Real final_score=0.0;
174  core::Real final_chainbreak=0.0;
175  getPoseExtraScores( pose, "looprms", final_looprms );
176  getPoseExtraScores( pose, "final_looprelax_score", final_score );
177  getPoseExtraScores( pose, "final_chainbreak", final_chainbreak );
178  job->add_string_real_pair("loop_rms ", final_looprms);
179  job->add_string_real_pair("total_energy ", final_score);
180  job->add_string_real_pair("chainbreak ", final_chainbreak);
181  // mirror to tracer
182  TR << "loop_rms " << final_looprms << std::endl;
183  TR << "total_energy " << final_score << std::endl;
184  TR << "chainbreak " << final_chainbreak << std::endl;
185  }
186  }
187  }
188  clock_t stoptime = clock();
189  if ( keep_time ) {
190  TR << "Job " << curr_nstruct << " took "<< ((double) stoptime - starttime )/CLOCKS_PER_SEC
191  << " seconds" << std::endl;
192  }
193 }
194 
196 {
197  return "LoopBuildMover";
198 }
200 {
201  using namespace basic::resource_manager;
202  // load loopfile
203  if ( ! ResourceManager::get_instance()->has_resource_with_description( "LoopsFile" ) )
204  {
205  throw utility::excn::EXCN_Msg_Exception( "AHH IT'S THE END OF DAYS. RUN FOR YOUR LIVES" );
206  }
207  protocols::loops::LoopsFileDataOP loops_from_file = get_resource< protocols::loops::LoopsFileData >( "LoopsFile" );
208  loop_relax_mover_.loops_file_data( *loops_from_file );
209 }
210 
211 }//loop_build
212 }//protocols
213 
214